Adapter Pattern
서로 다른 또는 호환되지 않는 인터페이스를 가진 객체들이 호환될 수 있도록 하는 구조적 디자인 패턴입니다.
어댑터라는 단어는 일상에서 많이 들어본 단어일 겁니다.
데스크톱과 모니터에 전원을 공급할 때 우리는 220V에서 해당 장치가 사용할 수 있는 다른 전압으로 바꿔주는 것처럼 어댑터 패턴에서의 어댑터란 클라이언트가 연결하고자 하는 서로 다른 스펙을 가진 대상과 연결될 수 있도록 해주는 변환기인 셈입니다.
장점
- 단일 책임 원칙(SRP)을 준수합니다.
프로그램의 기본 비즈니스 로직에서 인터페이스나 데이터 변환 코드를 분리할 수 있습니다. - 개방 폐쇄 원칙(OCP)을 준수합니다.
클라이언트가 인터페이스를 통해 어댑터와 연결되는 경우 기존 클라이언트 코드를 수정/변형하지 않고 새롭게 확장할 수 있습니다.
단점
- 어댑터를 통해 변환이 필요한 곳이 많아질수록 새로운 인터페이스와 많은 어댑터 클래스가 생성되므로 복잡성이 높아질 수 있습니다.
구현 방법
- 호환되지 않는 인터페이스가 있는 클래스가 최소 두 개 이상 있는 지점을 확인하세요.
- 외부 라이브러리나 레거시 코드 등...
- 클라이언트 인터페이스를 생성하고 클라이언트가 서비스와 통신할 것을 정의하세요.
- 클라이언트 인터페이스의 구상체인 어댑터 클래스를 생성합니다.
- 이때, 어댑터 클래스에는 서비스 객체(Adaptee)를 참조할 필드가 추가돼야 합니다.
- 필드 초기화는 생성자 또는 메소드 호출 시점에 수행합니다.
- 클라이언트 인터페이스의 모든 메소드를 구현하세요.
어댑터는 인터페이스 또는 데이터 형식 변환만 처리해야 하며, 실제 작업은 서비스 객체에 위임하도록 합니다.
브리지(Bridge) vs. 어댑터(Adapter)
- 브리지 패턴 : 일반적으로 사전에 설계되고, 다양한 부분의 독립적 개발 지원합니다.
- 어댑터 패턴 : 기존 앱과 연결되며 원래 호환되지 않던 일부 클래스들의 호환하도록 합니다.
참조
'개발 > Design Pattern' 카테고리의 다른 글
[Design Pattern] 추상 팩토리 패턴 (Abstract Factory) (0) | 2022.10.26 |
---|---|
[Design Pattern] 팩토리 메서드 패턴 (Factory Method) (0) | 2022.10.25 |
[Design Pattern] 데코레이터 패턴 (Decorator) (0) | 2022.10.24 |
[Design Pattern] 프록시 패턴 (Proxy) (0) | 2022.10.20 |
[Design Pattern] 싱글톤 패턴 (Singleton) (0) | 2022.10.19 |