ios dev kangwook.

08. Adapter Pattern 본문

Design Pattern

08. Adapter Pattern

kangwook 2022. 8. 23. 22:40

코드를 재사용하기 위해 구조를 변경해서 클래스들이 호환될 수 있게 연결시키는 패턴

Adapter Pattern

Adapter Pattern은 클래스의 인터페이스를 클라이언트가 기대하는 다른 인터페이스로 변환한다. 호환되지 않는 인터페이스로 인해 작동하지 않는 클래스를 Adapter Pattern을 통해 함께 작동할 수 있게 한다.

  • Client : Client는 Target 인터페이스만 볼 수 있고 Adaptee를 사용하기 위한 요청을 보냄
  • Target : 클라이언트가 보내는 요청에 대한 메소드를 가지고 있음
  • Adapter : Target 인터페이스를 구현하며 Client와 Adaptee 중간에서 호환성이 없는 둘을 연결시켜주는 클래스
  • Adaptee : Client가 사용하려는 클래스

Adapter Pattern 예제

  • Iterator에서 Enumeration을 사용
    • Enumeration을 Iterator로 어댑팅 시키는 과정

// Adapter 클래스
public class EnumerationIterator implements Iterator<Object> {
    Enumeration<Int> enumeration;
 
    public EnumerationIterator(Enumeration<Int> enumeration) {
        this.enumeration = enumeration;
    }
     
    // Iterator의 hasNext() 메소드를 Enumeration의 hasMoreElements() 메소드로 호환시킴
    public boolean hasNext() {
        return enumeration.hasMoreElements();
    }
     
    // Iterator의 next() 메소드를 Enumeration의 nextElement() 메소드로 호환시킴
    public Object next() {
        return enumeration.nextElement();
    }
     
    // 하지만 Iterator의 remove()는 지원하지 못했기 때문에 에러를 던져줌
    public void remove() {
        throw new UnsupportedOperationException();
    }
}

결론

    • Adapter Pattern은 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 구조 패턴(Structural Pattern)
    • 코드 성능은 저하될 수 있으나 코드 구조를 깔끔하게 개선할 수 있음
    • 장점
      • 기존의 코드를 변경하지 않아도 해당 메소드를 사용할 수 있음
      • 코드를 변경하지 않기 때문에 클래스의 재활용성을 증가시킬 수 있음
    • 단점
      • 클래스들을 호환시키기 위해 클래스를 더 만들어야하기 때문에 복잡도가 증가할 수 있음
      • Adapter 코드에서 호환시켜주는 부분을 하나씩 다 구현해야하기 때문에 시간과 비용이 늘어남

 

 

 


본문은 Head First Design Pattern (2004) 를 참고하여 공부하고 작성하였음


 

'Design Pattern' 카테고리의 다른 글

10. Template Method Pattern  (0) 2022.08.29
09. Facade Pattern  (0) 2022.08.27
07. Command Pattern  (0) 2022.08.22
06. Singleton Pattern  (0) 2022.08.21
05. Abstract Factory Pattern  (0) 2022.08.20
Comments