2012년 4월 21일 토요일

[Java Design Pattern_2]Adapter 설명

# Adapter - 바꿔서 재이용하기


@ Adapter 패턴 - '이미 제공되어 있는 것'과 '필요한 것' 사이의 '차이'를 없애주는 디자인 패턴이 Adapter 패턴 입니다. 그래서 Adapter 패턴은  Wrapper 패턴으로 불리기도 합니다.

@ Adapter 패턴의 종류

 1. 클래스에 의한 Adapter 패턴 (상속을 사용한 Adapter 패턴)
 2. 인스턴스에 의한 Adapter 패턴(위임을 사용한 Adapter 패턴)


@ 상속을 사용한 Adapter 패턴


 - PrintBanner 클래스가 어댑터의 역할을 담당합니다. 이 클래스는 제공되어 있는 Banner 클래스를 상속해서, 필요로 하는 Print 인터페이스를 구현합니다. PrintBanner 클래스는 showWithParen(Banner) 메소드를 사용해서 printWeak(Print)를 구현하고, showWithAster(Banner) 메소드를 사용해서 printStrong(Print)를 구현합니다.


@ 위임을 사용한 Adapter 패턴

- PrintBanner 클래스는 banner 필드에서 Banner 클래스의 인스턴스를 가집니다. 이 인스턴스는 PrintBanner 클래스의 생성자에서 생성합니다. 그리고 printWeak 및 printStrong 메소드에서는 banner 필드를 매개로 showWithParen, showWithAster 메소드를 호출합니다. 즉, PrintBanner 클래스의 printWeak 메소드는 자신이 처리하는게 아니라 인스턴스(Banner)의 showWithParen 메소드에게 위임하고 있습니다.

@ Adapter 패턴의 등장 인물

 - Target(대상)의 역할 : Print 인터페이스(상속의 경우)나 Print 클래스(위임의 경우)가 이 역할을 합니다. Main 클래스가 사용하는 객체가 대상(Target)이다.

 - Client (의뢰자)의 역할 : 대상(Target)을 통해 일을 하는 Main 클래스가 이 역할을 한다.

 - Adaptee(개조되는 쪽)의 역할 : Banner 클래스가 이 역할을 한다. Banner 클래스의 역할이 Target의 메소드와 일치하면 Adapter의 역할이 필요없다.

 - Adapter의 역할 : PrintBanner 클래스가 Adapter 역할을 합니다. Banner클래스의 기능을 Target 대상이 사용할 수 있도록 상속,위임을 통해 구현한다.






@ 어떤 경우에 사용하는 것일까?

 1. 충분한 테스트를 받아서 버그가 적으며 실제로 지금까지 사용된 실적이 있는 클래스를 새로운 클라이언트 요청에 사용되도록 만들 때.

 2. 기존의 클래스를 전혀 수정하지 않고 목적한 인터페이스(API)를 맞출 때, 사용된다. 이때 기존 소스가 필요없다. 단지 사양(Signature..)만 알면 된다.

 3. 구 버전과 신 버전을 공존시키고, 유지와 보수도 편하게 하기 위해서 Adapter 패턴이 도움이 된다.












댓글 없음:

댓글 쓰기