์๋ฐ ๊ฐ๋ฐ์๋ก ์คํ๋ง ํ๋ ์์ํฌ๋ ํ์๋ก ์ดํดํ๊ณ ์ฌ์ฉํด์ผ ํ๋ ๊ธฐ์ ์ด ๋์์ฃ .
์ ๋ ์์ง ์คํ๋ง์ ์ ๋ชจ๋ฅด์ง๋ง, core ๋ถ๋ถ์ ๊ณต๋ถํ ๋ ์ผ๋ฐ์ ์ผ๋ก ์๊ตฌ์ฌํญ ๊ตฌํ์ ์ํด ํด๋์ค ๋ชจ๋ธ๋ง ํ ๋์ ๋ง์ด ์ฐจ์ด๊ฐ ๋๋ ๋ถ๋ถ์ด ์๋๋ฐ์,
๊ทธ๊ฒ์ ๋ฐ๋ก ๋ค์ค ์ธํฐํ์ด์ค ์์!
์ ๋ํ ์คํ๋ง์ ๋ถ์ํ๋ค ๋ณด๋ฉด ์ธํฐํ์ด์ค๋ค์ด ๋~๋ฌด ๋ง์์ ํ๊ณ ํ๊ณ ๋ค์ด๊ฐ๋ค๊ฐ ๊ฒฐ๊ตญ ์ ์ฒด๋ฅผ ๋ณด์ง ๋ชปํ๊ณ ๋์ฌํ๊ฒ ๋ฉ๋๋ค..
๊ทธ๋ฌ๋ค ๋ฌธ๋ ๋ค์ค ์ธํฐํ์ด์ค๋ฅผ ์์ํ๋ ์ด์ ์ ๋ํด์ ์ํ ์ฝ๋ฉ์ ํ๋ค ์ธ์ฌ์ดํธ๋ฅผ ์ป์ด ์งค๋งํ๊ฒ ์ค๋ช ์ ํ๋ ค๊ณ ํฉ๋๋ค.
ํต์ฌ์
์ด๋ค ๊ฐ์ฒด๊ฐ ๊ฐ์ง ํน์ฑ์ ์ต~๋ํ ์ชผ๊ฐ๋ณด๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ตฌํ์ฒด๋ฅผ ๋ง๋ค ๋ ์์ ํด๋์ค๋ค์ ๋ง๋ค๋ค ๋ณด๋ฉด, ์ ์คํ๋ง์ด ๊ทธ๋ ๊ฒ ์ธํฐํ์ด์ค๋ก ์๊ฒ ์ชผ๊ฐ์ ๊ฐ๋ฐ์ ํ๋์ง ์กฐ๊ธ์ ์๊ฒ ๊ฐ์์ต๋๋ค.
๋๋ฌผ, ์ฌ๋ ์ด๋ฐ ์ฌ์ด ๊ฐ๋ ์ ๋ชจ๋ธ๋งํ๋ค๊ณ ํด ๋ด ์๋ค.
๋๋ฌผ์ ํน์ง: ์ด๋ฆ, ๋์ด ๋ฑ ๊ธฐ๋ณธ ์ ๋ณด ์์. ์ง๋๋ค, ๊ธฐ์ด๊ฐ๋ค, ๋ ์๊ฐ๋ค, ๊ฑธ์ ์(๋) ์๋ค, ์ง์ง๊ธฐ๋ฅผ ํตํด ๊ฒฐํผ์ ํ ์(๋) ์๋ค. ๋ฑ..
์ฌ๋์ ํน์ง: ์ด๋ฆ, ๋์ด ๋ฑ ๊ธฐ๋ณธ ์ ๋ณด ์์. ๊ธฐ์ด๊ฐ ์ ์๋ค, ๊ฑธ์ ์ ์๊ณ , ๊ฒฐํผ ๊ฐ๋ฅ, ๊ณต๋ถํ๋ค, ๋งํ๋ค ๋ฑ๋ฑ..
์ด๋ฐ ํน์ง๋ค์ ์ ~๋ถ ์ธํฐํ์ด์ค๋ก ์ชผ๊ฐญ๋๋ค. ๋ฉ์๋ ๋ฑ ํ๋๋ง ๋์๋ ๊ด์ฐฎ์ต๋๋ค.
์๋ฅผ ๋ค์ด ์ง์ ์ ์๋ (Barkable) ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๋ฉด ์ด๋ฐ ์์ด๊ฒ ์ฃ .
public interface Barkable {
void bark();
}
๋ํ ์ ์ด๋ ์ฌ๋, ๋๋ฌผ ๊ณตํต์ด๋ผ ์๊ฐ๋๋ ์ธํฐํ์ด์ค๋ CoreBehavior๋ก ๋ฝ์๋ณด๊ณ ..
public interface AnimalCoreBehavior {
void greeting();
String getName();
int getAge();
}
์ฝ์ดํ ๊ธฐ๋ฅ๋ค์ด ์ต ์์ ์ธํฐํ์ด์ค๋ก ๋์ถ์ด ๋์๋ค๋ฉด, ์ธํฐํ์ด์ค๋ผ๋ฆฌ ๋ฌถ์ ์๋ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ์ฌ๋์ ๊ธฐ์ด๊ฐ๊ฑฐ๋ ๊ฑธ์ ์๋ ์์ผ๋ Barkable, Walkable์ ํ๋๋ก ํฉ์ณ๋ณด์ฃ .
public interface CrawlAndWalkable extends Crawlable, Walkable {
}
์ธํฐํ์ด์ค ์ฌ๋ฌ๊ฐ๋ฅผ ์ชผ๊ฐ๊ณ ํฉ์น๊ณ ์ง์ง๊ณ ๋ณถ๊ณ ํด๋ดค์ต๋๋ค.
๊ทธ๋์ ์ต์ข ์ผ๋ก ํํํ๊ณ ์ถ์ ๊ตฌํ์ฒด๋
1. ๊ฐ์์ง
2. ์
3. ๊ฒฐํผํ ์ฌ๋
์ ํํํ๊ณ ์ ํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด๋ ๊ฒ ์ฌ์ฉํ๊ฒ ์ฃ . ๊ทธ๋ฆฌ๊ณ ์ธํฐํ์ด์ค ์ ๋ง์ ๋ง๊ฒ ์ผ๊ด์ฒ๋ฆฌ ํ๊ณ ์ถ๋ค๋ฉด ํน์ ์ธํฐํ์ด์ค ๋ฆฌ์คํธ๋ก ๋ฌถ์ด์ ์ด๋ค ์ฒ๋ฆฌ๋ ํ ์ ์์ต๋๋ค.
public class Main {
public static void main(String[] args) {
CrawlAnimal dog = new Dog("์ฐ๋ฆฌ๊ฐ์์ง", 5);
FlyingAnimal eagle = new Bird("๋งค์๋", 3);
MarriedMankind yubunam = new MarriedMan("์ฒ ์", 30, "์ํฌ");
List<Barkable> barkables = Arrays.asList(dog, eagle);
List<AnimalCoreBehavior> animalCoreBehaviors = Arrays.asList(dog, eagle, yubunam);
}
}
๊ฐ ๊ตฌํ์ฒด๋ฅผ ๋ณด๋ฉด, ํน์ ๊ธฐ๋ฅ๋ค์ ์ง์ Dog, Bird ๋ฑ ํด๋์ค์์ ๊ตฌํํด๋ ๋์ง๋ง ๊ธฐ๋ฅ์ ํ ์ ์๋ ์์ํด๋์ค๋ฅผ ๋ง๋ค์์ต๋๋ค.
๊ณตํต์ ์ธํฐํ์ด์ค๊ฐ ์์ผ๋ฉด ๊ทธ ๊ฒ์ ๊ตฌํ์ฒด๋ ๋ง๋ค ์ ์์์์? ๋ง๋ค์ด ๋๋ฉด ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
public class Dog implements CrawlAnimal {
private AnimalCoreBehavior animalCoreBehavior;
private Crawlable crawlDelegator;
private Barkable barkDelegator;
public Dog(String name, int age) {
animalCoreBehavior = new AnimalCoreDelegator(name, age);
crawlDelegator = new CrawlDelegator();
barkDelegator = new BarkDelegator("์์");
}
@Override
public void bark() {
barkDelegator.bark();
}
@Override
public void crawl() {
crawlDelegator.crawl();
}
@Override
public void greeting() {
animalCoreBehavior.greeting();
}
@Override
public String getName() {
return animalCoreBehavior.getName();
}
@Override
public int getAge() {
return animalCoreBehavior.getAge();
}
}
public class Bird implements FlyingAnimal {
private AnimalCoreBehavior animalCoreBehavior;
private Barkable barkDelegator;
public Bird(String name, int age) {
this.animalCoreBehavior = new AnimalCoreDelegator(name, age);
this.barkDelegator = new BarkDelegator("๋ผ์ฝ ๋ผ์ฝ");
}
@Override
public void fly() {
System.out.println("ํธ๋๋๋");
}
@Override
public void bark() {
barkDelegator.bark();
}
@Override
public void greeting() {
animalCoreBehavior.greeting();
}
@Override
public String getName() {
return animalCoreBehavior.getName();
}
@Override
public int getAge() {
return animalCoreBehavior.getAge();
}
}
public class MarriedMan implements MarriedMankind {
private AnimalCoreBehavior animalCoreBehavior;
private CrawlAndWalkable crawlAndWalkDelegator;
private String sideName;
public MarriedMan(String name, int age, String sideName) {
this.animalCoreBehavior = new AnimalCoreDelegator(name, age);
this.crawlAndWalkDelegator = new CrawlAndWalkDelegator("์ ๋ํ ๋นจ๋ฆฌ ๊ฑท๋๋ค", "์ ๋ํ ๋๋ฆฌ๊ฐ ๋ด๋ค.");
this.sideName = sideName;
}
@Override
public void speak() {
System.out.println("์๋
๋ ๋งํ ์ ์๋ค.");
}
@Override
public void study() {
System.out.println("๊ณต๋ถ์ค");
}
@Override
public void greeting() {
animalCoreBehavior.greeting();
}
@Override
public String getName() {
return animalCoreBehavior.getName();
}
@Override
public int getAge() {
return animalCoreBehavior.getAge();
}
@Override
public void crawl() {
crawlAndWalkDelegator.crawl();
}
@Override
public void tellMeYourSide() {
System.out.println("hello my " + this.sideName);
}
@Override
public void walk() {
crawlAndWalkDelegator.walk();
}
@Override
public void run() {
crawlAndWalkDelegator.run();
}
}
๊ฐ ๊ตฌํ ํด๋์ค๋ค์ ํ๋์ ์ธํฐํ์ด์ค๋ฅผ ์์ํ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง, ๊ฝค ๋ง์ ๊ธฐ๋ฅ์ ์กฐํฉ์ด ์์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ๋๋ฅผ ๋ณด๋ฉด ๊ณตํต์ ๊ธฐ๋ฅ์ ๋ด๋นํ ์์ํด๋์ค๊ฐ ์ ์ธ๋์ด ์๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ด ์ ๋๋ก๋ง ํ์ธํด๋ด๋ ์ธํฐํ์ด์ค ์กฐํฉํ๊ธฐ์ ๋ฐ๋ผ์ ์์ฒญ๋ ํ์ฅ์ฑ์ ๊ฐ์ง ๊ฒ์ด๋๊ฑธ ์ ์๊ฐ ์๋๋ฐ, ์คํ๋ง์ ์ด๋ฐ์์ผ๋ก ๊ธฐ๋ฅ ๋จ์๋ฅผ ๋์ถํ๊ณ ๊ทธ ๊ธฐ๋ฅ๋ค์ ๊ฐ๊ฐ ์ํํ ์์ํด๋์ค๋ค์ ๋ง๋ค์ด ๋ด๋ฉด์ ์ค๋๊ธฐ๊ฐ ๋ฐ์ ํด ์ฌ ์ ์์๋ ๊ฒ ์๋๊น ์๊ฐ์ด ๋ญ๋๋ค.
ํ์ง๋ง ์ด๋ฐ ์์ ๊ตฌ์กฐ๋ฅผ ํ์ ์์ ์ ์ฉํ๊ธฐ๋ ์ฐธ ์ด๋ ต๋จ ์๊ฐ์ด ๋๋ค์ (์์ง ์งฌ์ด ์๋์ ๊ทธ๋ฐ์ง..)
'ํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์คํ๋ง] ArgumentResolver ์ฌ์ฉํ๊ธฐ. ์ด๋ ธํ ์ด์ ์ ํ์ํ๊ฐ? (0) | 2020.04.15 |
---|---|
http ํค๋๋ฅผ ์์ ํ๊ฒ ์ค์ ํ๋ ๋ฐฉ๋ฒ (0) | 2020.04.15 |
์ต๊ทผ๋๊ธ