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가지로 분리된다.
방법
- 상속을 이용 (inheritance)
Adaptee
를 상속받아Target
인터페이스를 구현한다. - 위임을 이용 (instance)
Adapter
는Adaptee
를합성
의 형태로 가지며,Target
인터페이스를 구현한다.
UML
구성요소
Target
: 합쳐질 interface (Client
에서 사용 될 interface)Client
:Target
interface를 사용하는 객체.Adaptee
: 호환되지 않아 개조되야 하는 interfaceAdapter
:Adaptee
를Target
의 interface로 개조한다.상속
혹은위임
을 한다.
왜 사용하는 것일까?
- 이미 주어진 기존의 클래스(
Adaptee
)를 개조하여 재이용하고 싶으나 호환성이 문제가 될 수 있다. 이 때Adapter
패턴을 사용하면 가령 소스파일이 없더라도 새로운 인터페이스에 맞게 개조할 수 있다. - 또는 구버전과의 호환성을 유지하고 싶을 때도
Adapter
패턴은 좋은 방법이 될 수 있다. 이 때 구버전이Target
, 신 버전이Adaptee
가 될 것이다. 이렇게 하면 사용자는 구버전만 사용하면 될 것이다. - 기능이 지나치게 동떨어진 경우는 당연히
Adapter
패턴을 사용할 수 없을 것이다.
관련 패턴
Bridge Pattern
: interface가 서로 다른 클래스들을 연결하는게Adapter
라면,Bridge
는 기능의 계층과 구현의 계층을 연결시킨다.Decorator Pattern
:Adapter
가 interface 차이를 조정하기 위한 것이라면,Decorator
는 interface를 수정하지 않은 채로 기능을 추가한다.