ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Design Pattern] Adapter Pattern
    Learn/Architecture 2022. 9. 4. 00:00

    # 개요

    서로 다른 인터페이스를 가진 클래스들이 같이 일할 수 있게 하기 위한 패턴

     

    클라이언트는 자신의 요청이 어떤 adaptee로 가는지 알 필요가 없음

     

    예시

    adapter는 클라이언트의 요청이 들어오면 adaptee를 변환하여 처리해준다. 

    public class TurkeyAdapter implements Duck { 
        // adaptee
        Turkey turkey;
        
        public TurkeyAdapter (Turkey turkey) {
            this.turkey = turkey;
        }
        
        public void quack () {
            turkey.gobble ();
        }
        
        public void fly () {
            for (int i= 0; i < 5; i++)
            turkey.fly ();
        }
    }

     

    아래와 같이 Adapter를 통해 turkey를 마치 duck처럼 쓸 수 있다. 

    public class DuckTestDrive {
        public static void main(String[] args) {
            MallardDuck duck = new MallardDuck();
            WildTurkey turkey = new WildTurkey();
            // turkey는 duck이 아니므로 adapter 필요
            Duck turkeyAdapter = new TurkeyAdapter(turkey);
            System.out.println("The Turkey says...");
            turkey.gobble();
            turkey.fly();
            System.out.println("\nThe Duck says...");
            testDuck(duck);
            System.out.println("\nThe TurkeyAdapter says...");
            // adapter를 통해 turkey는 duck이 아닌데도 testDuck에 줄 수 있다. 
            testDuck(turkeyAdapter);
        }
        
        // testDuck 함수는 duck만 받도록 되어있다. 
        static void testDuck(Duck duck) {
            duck.quack();
            duck.fly();
        }
    }

     

    # 종류

    Object Adapter 

    • adapter 객체는 adaptee의 레퍼런스를 가지며 책임을 위임함 (composition and delegation)
    • 위의 예시가 여기에 해당

    Class Adapter

    • 상속을 통해 adapter를 구현한다. (inheritance)
    • target이 꼭 interface일 필요가 없고 일반 클래스가 되어도 된다. 

     

    댓글

Designed by Tistory.