⚡어댑터 패턴이란?
어댑터 패턴(Adapter Pattern)은 인터페이스가 서로 다른 두 개의 클래스를 연결하여 호환성을 제공하는 패턴이다. 기존에 작성된 클래스나 라이브러리를 다른 클래스에서 사용하기 쉽도록 인터페이스를 맞춰주는 패턴이다.
어댑터 패턴은 대개 다음과 같은 세 가지 구성요소로 이루어진다.
- Target: 기존 시스템에 사용되는 인터페이스를 정의한다.
- Adaptee: 어댑터 패턴을 적용할 대상이 되는 클래스이다. 이 클래스의 인터페이스를 변경하거나 개선하는 것이 목적이다.
- Adapter: Adaptee 클래스를 Target 인터페이스에 맞게 변환해주는 클래스이다.
예를 들어 두 개의 클래스 A와 B가 있는 경우, 클래스 A는 클래스 B의 인터페이스와 다르다. 이때, 클래스 A를 클래스 B에서 사용할 수 있도록 하기 위해서는 어댑터 패턴을 사용하여 클래스 A를 클래스 B에 맞는 인터페이스로 변환해주어야 한다. 클래스 A는 Adaptee 역할을 하고 클래스 B는 Target 역할을 하며 변환을 수행하는 클래스는 Adapter 역할을 한다.
어댑터 패턴은 기존에 작성된 코드를 재사용하면서도 새로운 시스템을 구현하는 데 유용합니다. 또한, 다양한 라이브러리나 프레임워크를 사용하는 경우에도 인터페이스를 맞춰주는 어댑터를 사용하여 쉽게 연동할 수 있습니다.
⚡어댑터 패턴은 어떤 경우에 사용하는가 ?
- 기존의 코드를 재사용하면서 새로운 인터페이스를 지원해야 하는 경우: 기존의 코드는 변경하지 않고 새로운 인터페이스를 지원하기 위해 어댑터 클래스를 작성하여 기존의 코드와 새로운 시스템을 연결할 수 있다.
- 호환성이 없는 두 개의 클래스를 연결해야 하는 경우: 어댑터 패턴을 사용하여 두 개의 클래스를 연결하여 호환성을 제공할 수 있다.
- 다양한 라이브러리나 프레임워크를 사용하는 경우: 각 라이브러리나 프레임워크를 사용하기 위해서는 인터페이스를 맞춰주는 어댑터를 작성하여 연동할 수 있다.
- 기능을 추가하거나 변경하는 경우: 어댑터 클래스를 작성하여 기존의 코드에 새로운 기능을 추가하거나 기존의 기능을 변경할 수 있다.
⚡어댑터 패턴의 장단점
장점
- 기존의 코드의 재사용성: 어댑터 패턴을 사용하여 기존의 코드를 변경하지 않고도 새로운 인터페이스를 지원할 수 있으므로, 기존의 코드를 재사용할 수 있다.
- 호환성 제공: 호환성이 없는 두 개의 클래스를 연결하여 호환성을 제공할 수 있다.
- 코드의 유연성: 어댑터 패턴을 사용하여 인터페이스를 맞춰주면 다양한 라이브러리나 프레임워크를 쉽게 연동할 수 있으며 기능을 추가하거나 변경하는 경우에도 쉽게 대응할 수 있다.
단점
- 코드 복잡도 증가: 어댑터 클래스를 작성해야 하므로, 코드의 복잡도가 증가할 수 있다.
- 성능 저하: 어댑터 클래스를 사용하여 성능이 저하될 수 있다. 어댑터 클래스를 거쳐서 호출되는 경우 호출 시간이 추가로 소요될 수 있으므로 성능에 영향을 줄 수 있다.
- 오버헤드 발생: 어댑터 클래스를 만들어 사용하면, 객체 생성 및 초기화 등의 오버헤드가 추가될 수 있습니다. 이로 인해 메모리 사용량이 증가할 수 있습니다.
⚡어댑터 소스 정리
⚡생각
어댑터 패턴에서 중요하게 생각해야하는 부분은 기존 코드를 재사용 하면서 새로운 인터페이스를 지원하는 경우라고 생각한다.
래거시 시스템의 경우, 결합도가 높아서 인터페이스 수정이 어려운 경우, 새로운 인터페이스를 추가해서 사용하면 좋은 방법중 하나라고 생각을 한다. 이 어댑터 패턴은 Java의 JDK 안에서 Arrays.asList()나 InputStreamReader(InputStream), OutputStreamWriter(OutputStream) 등에서 사용되었다고 한다. 한번 클래스 내용을 확인 해보면 좋을거 같다.
반응형
'디자인 패턴' 카테고리의 다른 글
[디자인 패턴] 복합체 패턴에 대한 내용 정리 (0) | 2023.03.26 |
---|---|
[디자인 패턴] 브리지 패턴에 대한 내용 정리 (0) | 2023.03.25 |
[디자인 패턴] 프로토 타입 패턴에 대한 내용 정리 (0) | 2023.03.21 |
[디자인 패턴] 빌더 패턴에 대한 내용 정리 (0) | 2023.03.20 |
[디자인 패턴] 추상 팩토리 패턴에 대한 내용 정리 (0) | 2023.03.16 |