본문 바로가기

Knowledge/Design Pattern

어댑터 패턴 (Adapter Pattern)

어댑터 패턴 (Adapter Pattern)


한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환한다.

어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다.


》》 프로그램 세계에서는 이미 제공되어 있는 것을 그대로 사용할 수 없을 때 필요한

    형태로 교환하고 사용하는일이 자주 있다.


》》 어댑터 패턴을 아이폰7과 이어팟에 비유해보자면...

  • 클라이언트 : 타겟 인터페이스에 맞게 구현되어있다.

  • 어댑터 : 타겟 인터페이스를 구현하며 여기에는 어댑티 인스턴스가 들어가있다.

  • 어댑티 : 어댑터에 의해 변환된 것을 받는다.


어댑터를 어떻게 사용하는걸까?

1. 클라이언트에서 타겟 인터페이스를 사용하여 메소드를 호출함으로써 어댑터에 요청한다.

2. 어댑터에서는 어댑티 인터페이스를 사용하여 그 요청을 어댑티에 대한 메소드 호출로 변환한다.

3. 클라이언트에서는 호출 결과를 받긴하지만 중간에 어댑터가 있는지 알지 못한다.


어댑터에는 두가지 종류가 있다.

객체어댑터

: 객체 구성을 이용한다. 어댑티뿐만 아니라 그 서브클래스에 대해서도 어댑터 역할을 할 수 있다는 장점이 있다.

클래스어댑터

: 다중상속(자바에선 사용불가)을 이용한다. 어댑티 전체를 다시 구현하지 않아도 된다는 장점이 있다.


어댑터 패턴의 예제

자바에는 기존 콜렉션 인터페이스인 Enumeraion과 새로운 콜렉션 인터페이스인 Iterator가 있다.

Enumeration 인터페이스를 사용하는 구형 코드를 사용하는 경우가 종종 있지만,

새로 만드는 코드에서는 Iterator만 사용할 계획이다. 이런 경우에 바로 어댑터 패턴이 사용된다. 


그림으로 나타내자면 다음과 같다.


코드는 다음과 같다.