-
디자인패턴 (8) - 어댑터 패턴언어/디자인패턴 2023. 9. 12. 16:41
1. 어댑터 패턴이란?
- 클래스를 어댑터로 사용하는 구조 패턴이다.
- 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들을 함께 작동하도록 변환해주는 역할
- 이미 구축되어 있는 것을 새로운 어떤것에 사용할 때 양 쪽 간의 호환성을 유지해 주기 위해 사용하는 것
- 호환성 및 신규 기능 확장
2. 어댑터 패턴 구조
- 상속 혹은 합성해서 작업할 수 있다.
2.1 객체 어댑터
- 합성된 맴버에게 위임을 이용한 어댑터 패턴이다.
- 자기가 해야할 일을 클래스 멤버 객체의 메소드에게 다시 시킴
- 합성을 활용하여 런타임 중 어댑터가 결정되어 유연하다.
- 하지만, Adaptee객체를 필드 변수로 저장해야해서 공간을 차지한다.
- Adaptee : 어댑터 대상 객체 -> 기존 시스템/외부 시스템/ 써드파티 라이브러리
- Target(Client Interface): Adapter가 구현하는 인터페이스
- Adapter: Client와 Adaptee 중간에 둘을 연결
-Client: 기존 시스템을 어댑터를 통해 사용하려는 쪽 -> Client Interface를 통해 Service 이용
class Service{ void specificMethod(int spcialData){ //서비스 기능 호출 } } interface Target{ // Client Interface : 클라이언트가 사용할 고수준 어댑터 모듈 void method(int data); } class Adapter implements Target{ Service adaptee; Adapter(Service adaptee){ this.adaptee = adaptee; } public void method(int data){ adaptee.specificMethod(data)//위임 } } class Client{ public static void main(String[] args){ Target adapter = new Adapter(new Service()); adapter.method(1); } }
* 기존 클래스 ->어댑터-> 클래스
-> 구성해서 행동 위임하는 걸 한번 더 캡슐화한 느낌..
-> 기존 클래스 -> 어댑터 인터페이스-> 어댑터 인터페이스 구현체 (행동 위임할 클래스 구성)
기존 클래스는 어댑터를 통해 다른 클래스 메서드 호출 (행동 위임)
2.2 클래스 어댑터
- 클래스 상속을 이용한 어댑터 패턴
- Adaptee를 상속했음 -> 객체 구현 코드 없이 바로 코드 재사용 가능
class Service{ void specificMethod(){ // } } interface Target{ void method(); } class Adapter extends Service implements Target{ public void method(int data){ specificMethod(); } } class Client{ public static void main(String[] args){ Target adapter = new Adapter(); adapter.method(); } }
3. 어댑터 패턴의 특징
3.1 패턴 사용 시기
- 레거시 코드를 사용하고 싶은데, 새로운 인터페이스가 레거시 코드와 호환 안될 때
- 이미 만든 것을 재사용하려는데, 재사용 가능한 라이브러리를 수정할 수 없을 때
- 이미 만들어진 클래스를 새로운 인터페이스에 맞게 개조할 때
- 소프트웨어 구버전과 신버전 공존 시키고 싶을 때
3.2 패턴 장점
- 기본 비지니스 로직에서 인터페이스 또는 데이터 변환 코드 분리 ->SRP만족
- 기존 클래스 코드를 건들지 않고 인터페이스를 통해 어댑터와 작동 -> OCP 만족
- 추가로 필요한 메서드가 있다면, 어댑터를 빠르게 만들 수 있다.
3.3 패턴 단점
- 새로운 인터페이스 어댑터 클래스 세트로 도입해야함 -> 코드 복잡성 증가
- 직접 서비스 클래스 변경하는게 더 간단할 때도 있다.
'언어 > 디자인패턴' 카테고리의 다른 글
템플릿 메서드(Template Method) 패턴 (0) 2024.05.26 전략 패턴 (Strategy) (0) 2024.05.26 디자인 패턴 (7) - 커맨드 패턴 (0) 2023.09.12 디자인 패턴 (6) - 싱글톤 패턴 (0) 2023.09.11 디자인 패턴 (5) - 추상 팩토리 패턴 (0) 2023.09.11