Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- https://eo-oe.tistory.com/
- https://hjmag1120.tistory.com/
- https://ji-han.tistory.com/
- https://mynameiskgws.tistory.com/
- 이리5조
- 태어난김에 보스까지
- 스파르타코딩클럽
- https://vetenir.tistory.com/
Archives
- Today
- Total
info8995 님의 블로그
어댑터(Adapter) 패턴 정리 본문
1. 어댑터 패턴이란?
- 호환되지 않는 인터페이스를 변환하여 클라이언트가 원하는 인터페이스에 맞춰주는 구조적(Structural) 디자인 패턴
- 기존 코드의 핵심 로직을 변경하지 않고, 인터페이스만 조정하여 재사용성을 높일 수 있음
- 예시: 220V 전기기기를 110V 콘센트에서 사용하기 위한 변환 어댑터
2. 문제 상황
- 기존에 잘 동작하는 클래스(레거시 코드)가 있지만, 새로운 환경에서 요구하는 인터페이스와 맞지 않는 경우
- 직접 레거시 코드를 수정하면 결합도가 높아지고 유지보수가 어려워짐
- 새로운 인터페이스에 맞춰 새 클래스를 만드는 것은 비용과 리스크가 큼
- 어댑터 패턴을 사용하면 기존 코드를 수정하지 않고도 새로운 인터페이스와 호환 가능
3. 어댑터 패턴의 핵심 아이디어
- 클라이언트가 기대하는 인터페이스(ITarget)와 기존 클래스(Adaptee)의 인터페이스를 어댑터(Adapter)가 변환하여 연결
- 클라이언트는 내부 구현을 몰라도 기존 클래스를 원하는 방식으로 사용할 수 있음
- 인터페이스 변환 로직을 별도 클래스로 분리하여 **단일 책임 원칙(SRP)**을 지킬 수 있음
4. 어댑터 패턴 구현 방식
✅ 객체 어댑터(Object Adapter) 방식
- 어댑터가 Adaptee 인스턴스를 필드로 가지고 있고, 위임(Delegation) 방식으로 연결
- 다중 상속이 필요하지 않아 구현이 간편함

✅ 클래스 어댑터(Class Adapter) 방식
- 어댑터가 Adaptee를 상속하고, 동시에 ITarget 인터페이스도 구현하는 방식
- 다중 상속이 필요한 방식이라 일부 언어(C++ 가능, Java/Python 불가)에서는 제한됨

5. 어댑터 패턴의 장점과 단점
✅ 장점
- 기존 코드(레거시 코드)를 수정하지 않고 새로운 인터페이스와 연결 가능
- 인터페이스 변환 로직을 분리하여 단일 책임 원칙(SRP) 준수
- 기존 시스템을 유지하면서 새로운 기능을 추가할 때 유용함
❌ 단점
- 클래스 어댑터 방식은 다중 상속을 요구하여 제약이 있을 수 있음
- 새로운 인터페이스와 기존 클래스가 너무 다르면 어댑터의 변환 로직이 복잡해질 수 있음
6. 어댑터 패턴의 활용 예시
- 레거시 코드와 새로운 시스템 통합 (기존 라이브러리를 새 인터페이스에 맞춰 사용)
- 외부 라이브러리와의 연결 (API가 다를 때 변환 역할)
- 파일 입출력 포맷 변환 (CSV → JSON 변환 등)
📌 결론
어댑터 패턴은 호환되지 않는 인터페이스 간의 문제를 해결하여 기존 코드를 수정하지 않고도 재사용성을 높이고 유지보수성을 개선하는 유용한 패턴이다.
객체 어댑터와 클래스 어댑터 방식 중 상황에 맞게 선택하여 사용하면 된다.
'TIL(Today I Learned)' 카테고리의 다른 글
| 언리얼 RepNotify, Actor Replication, RPCs (0) | 2025.03.19 |
|---|---|
| 디자인 패턴 (0) | 2025.03.14 |
| IPv4와 IPv6의 차이점 (0) | 2025.03.12 |
| 네트워크 개념 정리 – 유형과 프로토콜(TCP & UDP) (0) | 2025.03.11 |
| osi 7계층 (0) | 2025.03.10 |