티스토리 뷰
한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 다른 인터페이스로 변환한다.
어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다.
- 사용방법 : 상속
- 호환되지 않은 인터페이스를 사용하는 클라이언트 그대로 활용 가능
- 향후 인터페이스가 바뀌더라도, 변경 내역은 어댑터에 캡슐화 되므로 클라이언트 바뀔 필요X
[클래스 다이어그램]
전기 콘센트를 보면 이해하기 쉽다.
한국의 표준 플러그를 일본에 전원 소켓에 바로 끼워줄수 없어 동그랑 모양을 일자로 바꿔주는 어댑터를 끼워주어야 한다.
이와같이 어댑터는 소켓의 인터페이스를 플러그에서 필요로 하는 인터페이스로 바꿔준다고 할 수 있다.
Duck.java
public interface Duck { public void quack(); public void fly(); }
Turkey.java
public interface Turkey { public void gobble(); public void fly(); }
MallardDuck.java
public class MallardDuck implements Duck{ @Override public void quack() { System.out.println("Quack quack"); } @Override public void fly() { System.out.println("duck is flying a short"); } }
TurkeyAdapter.java
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(); } }
WildTurkey.java
public class WildTurkey implements Turkey{ @Override public void gobble() { System.out.println("Gobble gobble"); } @Override public void fly() { System.err.println("I'm flying a short distance"); } }
Main.java
public static void main(String\[\] args) { SpringApplication.run(DesignPatternApplication.class, args); // ----------Adapter Pattern----------- // 오리와 칠면조 인터페이스 생성 // 만약 오리 객체가 부족해서 칠면조 객체를 대신 사용해야 한다면? // 두 객체는 인터페이스가 다르므로, 바로 칠면조 객체를 사용하는 것은 불가능함 // 따라서 칠면조 어댑터를 생성해서 활용해야 한다 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는 칠면조라고 생각하면 된다.
'StudyingRecords > Design Pattern' 카테고리의 다른 글
[DesignPattern / StrategyPattern] (0) | 2022.03.03 |
---|---|
[DesignPattern / Iterator패턴] (0) | 2022.02.28 |
싱글톤 패턴(Singleton pattern) (0) | 2022.01.05 |