적응자 패턴(Adapter Pattern)은 서로 다른 인터페이스를 가진 두 클래스를 적응자 클래스로 인터페이스를 통일시켜 사용하는 방법이다.
주로 기존 코드에 새로운 코드를 연동하여 사용하고 싶거나, 두 코드의 인터페이스가 달라 이를 하나로 통일하여 사용하고 싶을 때 사용한다.
한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 다른 인터페이스로 변환한다.
어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다.
다중상속을 이용하여 클래스를 적응자로 만들거나, 객체합성을 이용하여 객체를 적응자로 만들어 구현할 수 있다. 클래스 어댑터에서는 어댑터를 만들 때 타겟과 어댑티 모두의 서브 클래스로 만들고, 객체 어댑터에서는 고성을 통해서 어탭티에 요청을 전달하는 점을 제외하면 별다른 차이점이 없다.
// target
public interface Stack<T> {
void push(T o);
T pop();
T top();
}
// adaptee
public class DList<T> {
public void insert(DNode pos, T o) {...};
public void remove(DNode pos, T o) {...};
public void insertHead(T o) {...};
public void insertTail(T o) {...};
public T removeHead() {...};
public T removeTail() {...};
public T getHead() {...};
public T getTail() {...};
}
// adapter
public class DListImpStack<T> extends DList<T> implements Stack<T> {
public void push(T o) {
insertTail(o);
}
public T pop() {
return removeTail();
}
public T top() {
return getTail();
}
}
참고
https://ko.wikipedia.org/wiki/%EC%96%B4%EB%8C%91%ED%84%B0_%ED%8C%A8%ED%84%B4
http://wiki.hash.kr/index.php/%EA%B5%AC%EC%A1%B0%ED%8C%A8%ED%84%B4
https://jusungpark.tistory.com/22