A Blackhole

Adapter Pattern

2018-05-23

Adapter Pattern

Adapter allows classes with incompatible interfaces to work together by wrapping its own interface around that of an already existing class.

Wrapping Interface를 정의하여 서로 호환 불가한 interface(메서드들)끼리 합성한다.

예를 들어 110V 콘센트에 220V 전원을 꼽게 되면 모양이 맞지 않아 들어가지 않을 것이다. 우리는 돼지코 를 사용하여 이를 연결해 줄 수 있을 것이다.

Adapter = A something adapt(개조함) incompatible interfaces.

Adapter Pattern은 Wrapper Pattern 으로 불리기도 한다.

Java에서 이를 구현하기 위한 방법은 크게 2가지로 분리된다.

방법

  1. 상속을 이용 (inheritance)
    Adaptee 를 상속받아 Target 인터페이스를 구현한다.
  2. 위임을 이용 (instance)
    AdapterAdaptee합성 의 형태로 가지며, Target 인터페이스를 구현한다.

UML

adapter-pattern

구성요소

  1. Target : 합쳐질 interface (Client 에서 사용 될 interface)
  2. Client : Target interface를 사용하는 객체.
  3. Adaptee : 호환되지 않아 개조되야 하는 interface
  4. Adapter : AdapteeTarget의 interface로 개조한다. 상속 혹은 위임을 한다.

왜 사용하는 것일까?

  • 이미 주어진 기존의 클래스(Adaptee)를 개조하여 재이용하고 싶으나 호환성이 문제가 될 수 있다. 이 때 Adapter 패턴을 사용하면 가령 소스파일이 없더라도 새로운 인터페이스에 맞게 개조할 수 있다.
  • 또는 구버전과의 호환성을 유지하고 싶을 때도 Adapter 패턴은 좋은 방법이 될 수 있다. 이 때 구버전이 Target, 신 버전이 Adaptee가 될 것이다. 이렇게 하면 사용자는 구버전만 사용하면 될 것이다.
  • 기능이 지나치게 동떨어진 경우는 당연히 Adapter 패턴을 사용할 수 없을 것이다.

관련 패턴

  • Bridge Pattern : interface가 서로 다른 클래스들을 연결하는게 Adapter 라면, Bridge 는 기능의 계층과 구현의 계층을 연결시킨다.

  • Decorator Pattern : Adapter 가 interface 차이를 조정하기 위한 것이라면, Decorator 는 interface를 수정하지 않은 채로 기능을 추가한다.