Adapter 패턴
정의
- 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함꼐 작동하도록 해준다.
- Adapter의 다른의미로 Wrapper 라는 말을 사용함
방식
- 클래스 어댑터
- 객체 어댑터
클래스 어댑터 vs 객체어댑터
- 차이점
- 클래스 어댑터는 상속을 사용함
- 객체 어댑터는 합성을 사용함
- 위 그림을 보면 Adapter 가 operation()을 사용할 때 specificOperation 메서드를 호출하는데 이것이 내부 객체로 오는지 상속을 통해서 오는지의 차이가 있을뿐 동일한 형태다.
객체 어댑터
- 장점
- 상속이 아닌 구성(Composition)을 사용하기 때문에 더 유연하다.
- 단점
- Adapter 객체를 만들어야 사용가능하다.
클래스 어댑터
- 장점
- Adapter가 Adatee의 서브클래스이기 때문에 Adatee의 행동을 오버라이드 할 수 있다.
- Adatee 객체를 만들지 않아도 된다.
- 단점
- 상속을 이용하기 때문에 한 Adapter 클래스가 특정 Adatee클래스에만 적용 가능하다.
- 다중상속이 지원되는 언어에서만 사용가능하다.
사용 이유
- 하나의 인터페이스로 모든것을 추상화하기 힘들기 때문에 사용함
- 이미 구현된 라이브러리를 고치지 않고 새로운 라이브러리를 추가시켜 기능을 추가할 수 있기 때문에 사용함
장단점
- 장점
- 기존 코드를 변경하지 않아도 된다.
- 기존 코드를 변경하지 않기 때문에 클래스 재활용성을 증가 시킬 수 있다.
- 단점
- 구성요소를 위해 클래스를 증가시켜야 하기 때문에 복잡도가 증가할 수 있다.
- 클래스 Adapter의 경우 상속을 사용하기 때문에 유연하지 못하다.
- 반면 객체 Adapter의 경우는 대부분의 코드를 다시 작성해야 하기 때문에 효율적이지 못하다.
'Study' 카테고리의 다른 글
Web Server 와 WAS(Web Application Server) (0) | 2022.01.18 |
---|---|
Java - Reflection (0) | 2022.01.17 |
FrontController 패턴 - 디자인 패턴 (0) | 2021.12.24 |
MVC 패턴 - 디자인 패턴 (0) | 2021.12.22 |
멀티 쓰레드 (0) | 2021.12.20 |