본문 바로가기
컴퓨터과학/디자인패턴

[디자인패턴] 어댑터 패턴 (Adapter Pattern)

by 윤호 2021. 12. 5.

목적

클래스의 인터페이스를 클라이언트가 원하는 형태의 인터페이스로 변환

인터페이스 호환이 안되는 클래스를 사용할 수 있게 해줌

요소

문제 : 사용 객체의 API가 서로 다름

해결 : 함수를 변환하는 객체를 중간에 넣음

결과 : 변경 최소화

정의

어댑터를 통해 오리 대신 칠면조 사용하기

Turkey와 Duck 인터페이스

어댑터 클래스 (Turkey 인터페이스를 Duck 인터페이스로 사용할 수 있도록 만듬)

public class TurkeyAdapter implements Duck {
    Turkey turkey;

    public TurkeyAdapter(Turkey turkey) {
        this.turkey = turkey;
    }

    public void quack() {
        turkey.gobble();
    }

    public void fly() {
        turkey.fly();
    }
}

 

 

Main 클래스

public static void main(String[] args) {
        MallardDuck duck = new MallardDuck();
        WildTurkey turkey = new WildTurkey();
        Duck turkeyAdapter = new TurkeyAdapter(turkey);

        System.out.println("\nThe Duck says...");
        testDuck(duck);
        System.out.println("\nThe TurkeyAdapter says...");
        testDuck(turkeyAdapter);
    }

    static void testDuck(Duck duck) {
        duck.quack();
        duck.fly();
    }

turkey는 quack 메소드가 없지만 Adapter를 사용해서 Duck 처럼 호출할 수 있음

 


reference 상명대학교 조용주 교수님

댓글