어댑터 패턴
한 클래스의 인터페이스를 사용하고자 한 다른 인터페이스로 변환한다.
쓰고자 하는 인터페이스를 구현한 클래스에 바꾸고 싶은 클래스의 객체를 구성한다.
닭과 오리를 만들어서 날고 울 수 있게 하고 싶다.
그러나 두 객체의 행동이 약간 다르다.
1 2 3 4
| public interface Chicken { void kokkio(); void fly(); }
|
1 2 3 4
| public interface Duck { void quak(); void fly(); }
|
이 두 인터페이스를 구현하는 두 클래스가 있다.
1 2 3 4 5 6 7 8 9 10 11
| public class KoreanChicken implements Chicken{ @Override public void kokkio() { System.out.println("꼬끼오!!!"); }
@Override public void fly() { System.out.println("푸득..."); } }
|
1 2 3 4 5 6 7 8 9 10 11
| public class KoreanDuck implements Duck{ @Override public void quak() { System.out.println("꽥!!"); }
@Override public void fly() { System.out.println("푸드득~!"); } }
|
이제 닭을 오리처럼 행동을 요구하고 싶다.
오리 인터페이스를 구현하는 어댑터를 만들어보자
이 어댑터는 치킨 객체를 구성하고 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public class ChickenAdapter implements Duck{ Chicken chicken;
public ChickenAdapter(Chicken chicken){ this.chicken = chicken; } @Override public void quak() { chicken.kokkio(); }
@Override public void fly() { chicken.fly(); } }
|
이제 어댑터를 사용해서 오리와 닭을 둘다 동일한 메소드로 요청하자!
1 2 3 4 5 6 7 8 9 10 11 12
| public class Test { public static void main(String[] args) { Duck koreanDuck = new KoreanDuck(); koreanDuck.quak(); koreanDuck.fly();
Chicken koreanChicken = new KoreanChicken(); Duck adaptedChicken = new ChickenAdapter(koreanChicken); adaptedChicken.quak(); adaptedChicken.fly(); } }
|