구조 패턴 - 적응자 패턴(Adapter Pattern)

Kichang Kwon·2021년 12월 2일
0

디자인 패턴

목록 보기
1/1
post-thumbnail

적응자 패턴이란

적응자 패턴(Adapter Pattern)은 서로 다른 인터페이스를 가진 두 클래스를 적응자 클래스로 인터페이스를 통일시켜 사용하는 방법이다.

  • 호환되지 않는 인터페이스 때문에 함께 사용할 수 없는 클래스의 인터페이스를 변환하여 함께 작동할 수 있게 해주는 패턴
  • 라이브러리를 수정할 수 없을 경우 사용

주로 기존 코드에 새로운 코드를 연동하여 사용하고 싶거나, 두 코드의 인터페이스가 달라 이를 하나로 통일하여 사용하고 싶을 때 사용한다.

목적

한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 다른 인터페이스로 변환한다.
어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다.

구조

  • Client - Target의 메소드를 호춤함으로써 어탭터에 요청(중간에 Adapter에 대한 내용을 모름)
  • Adapter - Adaptee를 사용하여 그 요청을 Adaptee에 대한 하나 이상의 메소드를 호출로 변환

다중상속을 이용하여 클래스를 적응자로 만들거나, 객체합성을 이용하여 객체를 적응자로 만들어 구현할 수 있다. 클래스 어댑터에서는 어댑터를 만들 때 타겟과 어댑티 모두의 서브 클래스로 만들고, 객체 어댑터에서는 고성을 통해서 어탭티에 요청을 전달하는 점을 제외하면 별다른 차이점이 없다.

예제

// 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

profile
한 줄 소개

0개의 댓글