2011년 5월 23일 월요일

The Adapter Pattern

6. The Adapter Pattern
클래스가 갖는 프로그래밍 인터페이스를 다른 클래스의 프로그래밍 인터페이스로 변화시킨다. 하나의 프로그램에서 서로 관련이 없는 클래스들을 함께 일하도록 만들고 싶을 때 Adapter 패턴을 사용한다. Adapter 패턴의 개념은 매우 단순해질 수도 있다. 개발자가 원하는 인터페이스를 갖는 클래스를 작성한 후 해당 클래스가 다른 클래스와 메시지를 주고 받도록 만든다. 이런 작업을 수행하는 방법에는 두 가지가 있다. 즉 상속에 의해서 그리고 객체구성(위임)에 의해서이다. 처음에 개발자는 다른 클래스에서 새로운 클래스를 파생시킨 후 해당 클래스가 원하는 인터페이스와 호응하도록 메소드를 첨가하는 방식을 취한다. 두 번째 방법에서는 새로운 클래스 내부에 원본 클래스를 포함시킨 후 새로운 클래스 안에서의 호출 작업을 변환하는 메소드를 생성한다. 이런 두가지 방식을 각각 클래스 어댑터와 객체 어댑터로 부른다.
구조
*
상속을 이용한 방법
위임을 이용한 방법


역할
v Target의 역할
필요로 하는 메소드를 제공하는 역할
v Client의 역할
Target역할의 메소드를 사용하는 의로자
v Adaptee의 역할
적합되는 측 사용할 메소드가 이미 정의되어있는 객체
v Adapter의 역할
적합하는 측
의도
클래스의 인터페이스를 다른 필요한 클래스의 인터페이스에 맞게 변환해준다. Adapter 는 서로 호환성이 없는 인터페이스들끼리라도 같이 작동할 수 있게끔 해준다.
적용시기
다음과 같은 경우에 AdapterPattern를 이용한다.
  • 이미 만들어져 있는 클래스를 사용하고 싶지만, 인터페이스가 원하는 방식과 일치하지 않을때.
  • 관련성이 없거나, 예측하지 못한 클래스들과 협동하는 재사용가능한 클래스를 생성하기 원할때. 이 경우 클래스들이 호환성을 가지는 인터페이스를 필요로 하지 않는다.
  • (object adapter 의 경우에만 해당) 현재 이미 만들어진 여러개의 subclass가 필요한 경우, 하지만 각각의 서브클래스들에 대한 인터페이스를 하는 것은 비효율적이다. 이 경우 parent class의 인터페이스를 adapt 할 수 있다.

예제소스
*


예제 소스
public class Banner {
private String string;
public Banner(String string) {
this.string = string;
}
public void showWithParen() {
System.out.println("(" + string + ")");
}
public void showWithAster() {
System.out.println("*" + string + "*");
}
}
public interface Print {
public abstract void printWeak();
public abstract void printStrong();
}
public class PrintBanner extends Banner implements Print {
public PrintBanner(String string) {
super(string);
}
public void printWeak() {
showWithParen();
}
public void printStrong() {
showWithAster();
}
}
public class mainClass {
public static void main(String[] args) {
Print p = new PrintBanner("Hello");
p.printWeak();
p.printStrong();
}
}


관련패턴
  • Bridge 패턴 : Adapter 패턴은 인터페이스가 다른 클래스들을 연결하는 패턴이고, Bridge 패턴은 기능의 계층과 구현의 계층을 연결하는 패턴이다.
  • Decorator 패턴 : Adapter 패턴은 인터체이스가 다른 것을 메우기 위한 패턴이고, decorator 패턴은 인터페이스를 변경하지 않고 기능을 추가하는 패턴입니다.

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...