๊ธฐ์กด์ ์์คํ ์ด ์๊ณ , ์ธ์ฃผ์ ์ฒด์์ ์ถ๊ฐ์ ์ธ ์ฝ๋๋ฅผ ๋ฐ๋ ์ํฉ์ ๊ฐ์
์ด๋, ๊ธฐ์กด์ ์์คํ ์์ ์ฌ์ฉํ๊ณ ์๋ ์ธํฐํ์ด์ค์, ์ธ์ฃผ์ ์ฒด์์ ์ค ์ฝ๋์ ์ธํฐํ์ด์ค๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์์
๊ธฐ์กด์ ์์คํ ๊ณผ, ์ธ์ฃผ์ ์ฒด์ ์ฝ๋๋ฅผ ์์ ํ ์ ์๋ ์ํฉ์ผ ๋ ๊ธฐ์กด ์์คํ ์ ์ธํฐํ์ด์ค์, ์ธ์ฃผ์ ์ฒด ์ฝ๋์ ์ธํฐํ์ด์ค๋ฅผ ์ด์ด์ฃผ๋ ์ด๋ํฐ๋ฅผ ๋ง๋ค ์ ์์
์ด ์ด๋ํฐ๋ฅผ ๋ง๋ค์ด ์ธํฐํ์ด์ค๋ผ๋ฆฌ ํธํ๋๋๋ก ์ฐ๊ฒฐํด์ฃผ๋ ๋ฐฉ์์ด ์ด๋ํฐ ํจํด
interface Duck {
public void quack();
public void fly();
}
interface Turkey {
public void gobble(); // ๊ณจ๊ณจ ๊ฑฐ๋ฆฌ๊ธฐ
public void fly();
}
class TurkeyAdapter implements Duck {
Turkey turkey;
TurkeyAdapter(Turkey turkey) {
this.turkey = turkey;
}
void quack() {
turkey.gobble();
}
void fly() {
for (int i = 0; i < 5; i++) {
turkey.fly();
}
}
}
Duck turkeyAdapter = new TurkeyAdapter(turkey);
์ด๋ํฐ ์ธํฐํ์ด์ค ๋ผ๊ณ ํ๊ณ , ๋ณ๊ฒฝํ๊ณ ์ ํ๋ ๊ฒฐ๊ณผ ์ธํฐํ์ด์ค ( Duck )๋ฅผ ํ๊ฒ ์ธํฐํ์ด์ค ๋ผ๊ณ ํจํด๋ผ์ด์ธํธ ๋ผ๊ณ ํจFacade ๋ ์ธ๊ด, ๊ฒ๋ชจ์์ ์๋ฏธํ๋ ๋จ์ด
๋ง์ฝ ํ์จ์ดํฐ๋ฅผ ํตํด ์ํ๋ฅผ ๋ณธ๋ค๋ฉด, ํ์ฝ ๊ธฐ๊ณ๋ฅผ ์๋์ํค๊ณ โ ๋ฐฉ์์ ๋ถ์ ์กฐ์ ํ๊ณ โ ์คํฌ๋ฆฐ์ ๋ด๋ฆฌ๊ณ ... ๋ฑ๋ฑ์ ์์ ์ ์งํ ํด์ผ ํจ
์ํ๋ฅผ ๋ณผ ๋ ์ด๋ฐ ๊ธฐ๋ฅ๋ค์ ์ผ์ผ์ด ์กฐ์ํ๊ธฐ๋๊ฒ์ ๋๋ฌด๋๋ ๊ท์ฐฎ๊ณ , ํฉ๋ฆฌ์ ์ด์ง ๋ชปํจ
๋ฐ๋ผ์ ์ด๋ฐ ๊ธฐ๋ฅ๋ค์ ๋ฏธ๋ฆฌ ๊ตฌํํด๋์ Facade ํด๋์ค๋ฅผ ๋ง๋ค์ด ๋๊ณ , Facade ํด๋์ค๋ฅผ ํตํด ์ํ๋ฅผ ํค๊ฑฐ๋, ์ํ๋ฅผ ๋๋๋ก ๊ตฌํ
๊ทธ๋ฌ๋ฉด ์ ์ ๋ ์ํ ์ผ๊ธฐ ๋ผ๋ ๋ฒํผ๋ง ๋๋ฅด๋ฉด, ํ์ฝ ๊ธฐ๊ณ๋ฅผ ์๋์ํค๊ณ โ ๋ฐฉ์์ ๋ถ์ ์กฐ์ ํ๊ณ ๋ฑ ์ด๋ฐ ์์
๋ค์ ํ๋ฒ์ ์งํ ํ ์ ์๋๋ก ํ๋๊ฒ
class HomeTheaterFacade {
PopconPopper popper;
Tuner tuner;
...
HomeTheaterFacade(PopconPopper popper, Tuner tuner ...) {
this.popper = popper;
this.tuner = tuner;
}
void watchMovie(String movie) {
popper.on();
popper.pop();
...
}
}
HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade(...);
homeTheaterFacade.watchMovie();
ํผ์ฌ๋ ํจํด์ ์ ์ฉํจ์ผ๋ก์จ ํด๋ผ์ด์ธํธ ( HomeTheaterFacade ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ณณ )๊ณผ, ์๋ธ์์คํ ( HomeTheaterFacade ํด๋์ค )๋ฅผ ๋ถ๋ฆฌ ํ ์ ์์
์ฆ, ํ์์ดํฐ์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋๋ผ๋ ํด๋ผ์ด์ธํธ๋ฅผ ์์ ํ๋ ๊ฒ์ด ์๋๋ผ HomeTheaterFacade ๋ง ์์ ํ๋ฉด ๋จ
<aside> ๐ก ์ธํฐํ์ด์ค๋ฅผ ํด๋ผ์ด์ธํธ์์ ์ฌ์ฉํ๊ณ ์ ํ๋ ์ธํฐํ์ด์ค ํํ๋ก ๋ณํํด์ฃผ๋ ํจํด
</aside>