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 패턴은 인터페이스를 변경하지 않고 기능을 추가하는 패턴입니다.

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...