반응형
1. 어댑터 패턴이란?
어댑터 패턴은 구조 패턴 (Structural Patterns)의 하나로써 서로 호환되지 않는 인터페이스를 가진 클래스들을 함께 동작하도록 연결해주는 구조 패턴이다. 마치 전기 콘센트의 어댑터처럼, 기존 클래스의 인터페이스를 클라이언트가 기대하는 인터페이스로 변환하여 사용 가능하게 만든다.
특징
- 인터페이스 호환 문제 해결: 기존 코드를 수정하지 않고도 새 코드와 호환되게 만든다.
- 기존 시스템 재사용성 증가: 이미 존재하는 클래스를 변경 없이 재활용할 수 있다.
- SOLID 원칙 중 개방/폐쇄 원칙(OCP)과 단일 책임 원칙(SRP)을 지킴
2. 어댑터 패턴의 구조
- Target(목표 인터페이스): 클라이언트가 기대하는 인터페이스
- Adaptee(적응 대상 클래스): 기존에 호환되지 않는 인터페이스를 가진 클래스
- Adapter(어댑터 클래스): Adaptee를 감싸 Target 인터페이스와 호환되게 만든 클래스
3. 어댑터 패턴 구현 예제
예제: 외부 알림 서비스를 내 웹 애플리케이션에 통합하기
// Target 인터페이스: 우리 시스템에서 기대하는 인터페이스
interface Notifier {
void send(String message);
}
// Adaptee: 외부에서 제공하는 기존 클래스 (예: 외부 라이브러리)
class SlackService {
public void postMessage(String text) {
System.out.println("[Slack] " + text);
}
}
// Adapter: 외부 클래스를 우리 시스템 인터페이스에 맞게 래핑
class SlackAdapter implements Notifier {
private SlackService slack;
public SlackAdapter(SlackService slack) {
this.slack = slack;
}
@Override
public void send(String message) {
slack.postMessage(message);
}
}
// 클라이언트 코드
public class AdapterExample {
public static void main(String[] args) {
SlackService slackService = new SlackService();
Notifier notifier = new SlackAdapter(slackService);
notifier.send("새로운 공지가 있습니다.");
}
}
4. 어댑터 패턴의 장점과 단점
장점
- 기존 클래스의 재사용이 가능하다.
- 클라이언트 코드를 변경하지 않고 외부 시스템과 통합할 수 있다.
- 코드 유연성과 확장성이 향상된다.
단점
- 클래스 수가 많아질 수 있고, 구조가 복잡해질 수 있다.
- 너무 많은 어댑터를 사용하면 코드 유지보수가 어려울 수 있다.
5. 활용 사례 (웹 개발 관련)
1) 외부 API 통합
REST API나 외부 라이브러리의 응답 형식을 내부 도메인 모델에 맞게 변환할 때 사용된다.
2) 프론트엔드 라이브러리 통합
기존 UI 컴포넌트를 다른 프레임워크에서 재사용하거나, 다른 이벤트 시스템에 맞추기 위해 어댑터를 만든다.
3) 로깅 시스템 통합
다양한 로깅 시스템(e.g., Log4j, SLF4J 등)을 프로젝트의 로깅 인터페이스에 통합할 때 어댑터를 사용한다.
어댑터 패턴은 기존 시스템을 그대로 두고 새로운 시스템과의 연결을 가능하게 하여, 코드의 재사용성과 유지보수성을 크게 향상시킨다. 특히 웹 개발에서는 외부 API, 서드파티 라이브러리, 플랫폼 간 연동 등 다양한 상황에서 널리 활용된다.
반응형
'Programming > Design Patterns' 카테고리의 다른 글
GoF 디자인 패턴 - 브릿지 패턴 (Bridge Pattern) (0) | 2025.04.24 |
---|---|
GoF 디자인 패턴 - 프로토타입 패턴 (Prototype Pattern) (0) | 2025.04.10 |
GoF 디자인 패턴 - 빌더 패턴 (Builder Pattern) (0) | 2025.04.09 |
GoF 디자인 패턴 - 추상 팩토리 패턴 (Abstract Factory Pattern) (2) | 2025.04.08 |
GoF 디자인 패턴 - 팩토리 메서드 패턴 (Factory Method Pattern) (1) | 2025.04.08 |