티스토리 뷰

한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 다른 인터페이스로 변환한다.
어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다.

  • 사용방법 : 상속
  • 호환되지 않은 인터페이스를 사용하는 클라이언트 그대로 활용 가능
  • 향후 인터페이스가 바뀌더라도, 변경 내역은 어댑터에 캡슐화 되므로 클라이언트 바뀔 필요X
[클래스 다이어그램]

전기 콘센트를 보면 이해하기 쉽다.
한국의 표준 플러그를 일본에 전원 소켓에 바로 끼워줄수 없어 동그랑 모양을 일자로 바꿔주는 어댑터를 끼워주어야 한다.
이와같이 어댑터는 소켓의 인터페이스를 플러그에서 필요로 하는 인터페이스로 바꿔준다고 할 수 있다.

  1. Duck.java

     public interface Duck {
       public void quack();
       public void fly();
     }
  2. Turkey.java

     public interface Turkey {  
       public void gobble();  
       public void fly();
     }
  3. 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");
       }
     }
  4. 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();
       }
     }
  5. 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");
       }
     }
  6. 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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함