์ฉ๋ : ํด๋์ค๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ์์ (๋ค๋ฅธ ๊ณณ์์ ๊ฐ๋ฐํ๋ค๊ฑฐ๋, ์์ ํ ์ ์์ ๋) ์ค๊ฐ์์ ๋ณํ ์ญํ ์ ํด์ฃผ๋ ํด๋์ค๊ฐ ํ์ โ ์ด๋ํฐ ํจํด
์ฌ์ฉ ๋ฐฉ๋ฒ : ์์
ํธํ๋์ง ์์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ ๊ทธ๋๋ก ํ์ฉ ๊ฐ๋ฅ
ํฅํ ์ธํฐํ์ด์ค๊ฐ ๋ฐ๋๋๋ผ๋, ๋ณ๊ฒฝ ๋ด์ญ์ ์ด๋ํฐ์ ์บก์ํ ๋๋ฏ๋ก ํด๋ผ์ด์ธํธ ๋ฐ๋ ํ์X
์์ดํฐ์ ์ด์ดํฐ์ ์๊ฐํด๋ณด์
๊ฐ์ฅ ํํ ์ด์ดํฐ ์ญ์ ์์ดํฐ์ ์ฌ์ฉํ๋ ค๋ฉด, ์ญ ์์ฒด๊ฐ ๋ง์ง ์๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์ด๋ํฐ๋ฅผ ๋ฐ๋ก ๊ตฌ๋งคํด์ ์ฐ๊ฒฐํด์ผ ์ด๋ฐ ์ด์ดํฐ๋ค์ ์ฌ์ฉํ ์ ์๋ค
์ด์ฒ๋ผ ์ด๋ํฐ๋ ํ์๋ก ํ๋ ์ธํฐํ์ด์ค๋ก ๋ฐ๊ฟ์ฃผ๋ ์ญํ ์ ํ๋ค
์ด์ฒ๋ผ ์ ์ฒด์์ ์ ๊ณตํ ํด๋์ค๊ฐ ๊ธฐ์กด ์์คํ ์ ๋ง์ง ์์ผ๋ฉด?
๊ธฐ์กด ์์คํ ์ ์์ ํ ๊ฒ์ด ์๋๋ผ, ์ด๋ํฐ๋ฅผ ํ์ฉํด ์ ์ฐํ๊ฒ ํด๊ฒฐํ์
์ค๋ฆฌ์ ์น ๋ฉด์กฐ ์ธํฐํ์ด์ค ์์ฑ
๋ง์ฝ ์ค๋ฆฌ ๊ฐ์ฒด๊ฐ ๋ถ์กฑํด์ ์น ๋ฉด์กฐ ๊ฐ์ฒด๋ฅผ ๋์ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด?
๋ ๊ฐ์ฒด๋ ์ธํฐํ์ด์ค๊ฐ ๋ค๋ฅด๋ฏ๋ก, ๋ฐ๋ก ์น ๋ฉด์กฐ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํจ
๋ฐ๋ผ์ ์น ๋ฉด์กฐ ์ด๋ํฐ๋ฅผ ์์ฑํด์ ํ์ฉํด์ผ ํ๋ค
- Duck.java
package AdapterPattern;
public interface Duck {
public void quack();
public void fly();
}
- Turkey.java
package AdapterPattern;
public interface Turkey {
public void gobble();
public void fly();
}
- WildTurkey.java
package AdapterPattern;
public class WildTurkey implements Turkey {
@Override
public void gobble() {
System.out.println("Gobble gobble");
}
@Override
public void fly() {
System.out.println("I'm flying a short distance");
}
}
- TurkeyAdapter.java
package AdapterPattern;
public class TurkeyAdapter implements Duck {
Turkey turkey;
public TurkeyAdapter(Turkey turkey) {
this.turkey = turkey;
}
@Override
public void quack() {
turkey.gobble();
}
@Override
public void fly() {
turkey.fly();
}
}
- DuckTest.java
package AdapterPattern;
public class DuckTest {
public static void main(String[] args) {
MallardDuck duck = new MallardDuck();
WildTurkey turkey = new WildTurkey();
Duck turkeyAdapter = new TurkeyAdapter(turkey);
System.out.println("The turkey says...");
turkey.gobble();
turkey.fly();
System.out.println("The Duck says...");
testDuck(duck);
System.out.println("The TurkeyAdapter says...");
testDuck(turkeyAdapter);
}
public static void testDuck(Duck duck) {
duck.quack();
duck.fly();
}
}
์๊น ํ์ธํ ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์์ Target์ ์ค๋ฆฌ์ ํด๋นํ๋ฉฐ, Adapter๋ ์น ๋ฉด์กฐ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.