어댑터 패턴
어댑터 패턴은 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 동작하도록 해준다.
호환되지 않은 인터페이스를 사용하는 클라이언트 그대로 활용이 가능하고 향후 인터페이스가 변경되더라도 변경 내역은 어댑터에 캡슐화되므로 클라이언트는 바뀔 필요가 없다.
다음 코드를 보자.
public interface Duck {
public void quack();
public void fly();
}
public interface Turkey {
public void gobble();
public void fly();
}
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");
}
}
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();
}
}
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();
}
}
위 코드에서 만약 오리 객체가 부족해서 칠면조 객체를 대신 사용해야 한다면, 두 객체는 인터페이스가 다르므로, 바로 칠면조 객체를 사용하는 것은 불가능하다. 따라서 칠면조 어댑터를 생성해서 활용해야 한다.
Reference
'객체지향' 카테고리의 다른 글
| [객체지향] 디자인 패턴(5) - 전략 패턴 (0) | 2022.05.04 |
|---|---|
| [객체지향] 디자인 패턴(3) - 팩토리 메서드 패턴 (0) | 2022.05.02 |
| [객체지향] 디자인 패턴(2) - 템플릿 메서드 패턴 (0) | 2022.05.01 |
| [객체지향] 디자인 패턴(1) - 싱글톤 패턴 (0) | 2022.04.30 |
| [객체지향] 디자인 패턴 (0) | 2022.04.29 |