sungwony

[디자인패턴] Adapter 패턴 본문

development/디자인패턴

[디자인패턴] Adapter 패턴

일상이상삼상 2018. 7. 11. 18:28

Adapter 패턴


- 이미 제공되어 있는 것을 그대로 사용할 수 없는 경우 '이미 제공되어 있는 것'과 '필요한 것' 사이의 간격을 메우는 디자인 패턴

- Wrapper 패턴으로도 불린다


 

 전원의 비유 

 예제 프로그램 

 제공되고 있는 것

 교류 100 볼트 

 Banner 클래스(showWithParen, showWithAster)

 교환장치

 어댑터 

 PrintBanner 클래스 

 필요한 것 

 직류 12볼트 

 Print 인터페이스(printWeek, printStrong) 


상속(inheritage)을 이용한 Adapter패턴



Banner 클래스


Print 인터페이스


PrintBanner 클래스


Main 클래스


위임(delegation)을 이용한 Adapter 패턴



Banner 클래스


Print 클래스


PrintBanner 클래스


Main 클래스


 등장인물

역할 

 Target(대상)

지금 필요한 메소드를 결정한다. 노트북을 작동시키기 위한 직류 12볼트에 해당한다.

예제에서는 Print 인터페이스(상속의 경우)나 Pring 클래스(위임의 경우)가 이 역할을 한다.

 Client(의뢰자)

Target 역할의 메소드를 사용해서 일을 한다. 직류 12볼트로 움직이는 노트북에 해당한다.

예제에서는 Main 클래스가 이 역할을 한다.

 Adaptee

 (개조되는 쪽)

Adapt-er(개조하는 쪽)가 아니고 Adapt-ee(개조되는 쪽)이다. Adaptee는 이미 준비되어 있는 메소드를 가지고 있는 역할이다. 교류 100볼트 AC전원에 해당하며, 예제에서는 Banner 클래스가 이 역할을 담당한다. Adaptee역의 메소드가 Target 역할의 메소드와 일치하면 Adapter는 불필요하다.

 Adapter

Adapter패턴의 주인공이다. Adaptee의 메소드를 사용해서 Target 역할을 만족시키기 위한 것이 Adapter 역할. 교류 100볼트를 직류 12볼트로 교환하는 것이 Adapter의 역할에 해당한다. 예제에서는 PrintBanner 클래스가 Adapter의 역할을 한다.


클래스에 의한 Adapter의 경우 Adapter의 역할은 '상속'을 사용한 Adaptee의 역할을 이용하지만, 

인스턴스에 의한 Adapter 패턴의 경우 '위임'을 사용한 Adaptee의 역할을 이용한다.