Study

Adapter 패턴(Adapter Pattern) - 디자인패턴

kdhoooon 2021. 12. 24. 12:57

Adapter 패턴

정의

  • 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함꼐 작동하도록 해준다.
  • Adapter의 다른의미로 Wrapper 라는 말을 사용함

 

방식

  1. 클래스 어댑터
  2. 객체 어댑터

 

클래스 어댑터 vs 객체어댑터

출처 https://en.wikipedia.org/wiki/Adapter_pattern

  • 차이점
    • 클래스 어댑터는 상속을 사용
    • 객체 어댑터는 합성을 사용
  • 위 그림을 보면 Adapter 가 operation()을 사용할 때 specificOperation 메서드를 호출하는데 이것이 내부 객체로 오는지 상속을 통해서 오는지의 차이가 있을뿐 동일한 형태다.

객체 어댑터

  • 장점
    • 상속이 아닌 구성(Composition)을 사용하기 때문에 더 유연하다.
  • 단점
    • Adapter 객체를 만들어야 사용가능하다.

클래스 어댑터

  • 장점
    • Adapter가 Adatee의 서브클래스이기 때문에 Adatee의 행동을 오버라이드 할 수 있다.
    • Adatee 객체를 만들지 않아도 된다.
  • 단점
    • 상속을 이용하기 때문에 한 Adapter 클래스가 특정 Adatee클래스에만 적용 가능하다.
    • 다중상속이 지원되는 언어에서만 사용가능하다.

 

사용 이유

  • 하나의 인터페이스로 모든것을 추상화하기 힘들기 때문에 사용함
  • 이미 구현된 라이브러리를 고치지 않고 새로운 라이브러리를 추가시켜 기능을 추가할 수 있기 때문에 사용함

 

장단점

  • 장점
    • 기존 코드를 변경하지 않아도 된다.
    • 기존 코드를 변경하지 않기 때문에 클래스 재활용성을 증가 시킬 수 있다.
  • 단점
    • 구성요소를 위해 클래스를 증가시켜야 하기 때문에 복잡도가 증가할 수 있다.
    • 클래스 Adapter의 경우 상속을 사용하기 때문에 유연하지 못하다.
    • 반면 객체 Adapter의 경우는 대부분의 코드를 다시 작성해야 하기 때문에 효율적이지 못하다.