Notice
Recent Posts
Recent Comments
Link
나만의공간
🧱 1. 어댑터 패턴이란? 본문
어댑터 패턴(Adapter Pattern)이란? 구조가 다른 코드를 연결하는 스마트한 방법
소프트웨어를 개발하다 보면 기존 시스템은 그대로 유지하면서도 새로운 외부 라이브러리나 코드 구조를 통합하고 싶을 때가 있습니다. 이런 상황에서 어댑터 패턴(Adapter Pattern)이 큰 도움이 됩니다.
🧱 어댑터 패턴의 핵심 목적
어댑터 패턴은 서로 호환되지 않는 두 인터페이스를 중간에서 변환해주는 구조적 디자인 패턴입니다. 마치 220V 콘센트에 110V 노트북 충전기를 연결할 때 사용하는 전압 어댑터처럼, 기존 시스템을 수정하지 않고도 새로운 코드를 유연하게 통합할 수 있습니다.
[기존 코드] = 콘센트 (220V)
[새 코드] = 노트북 충전기 (110V)
[중간 어댑터] = 전압 변환기 (어댑터 패턴)
즉, 새로운 코드만 어댑터를 통해 기존 시스템과 연결하면 되는 것이죠.
📌 어댑터 패턴은 언제 사용하나요?
- 기존 클래스를 변경하지 않고 새로운 클래스를 기존 구조에 맞춰 사용하고 싶을 때
- 레거시 시스템이나 외부 라이브러리를 새로운 인터페이스로 감싸고 싶을 때
- 유지보수는 최소화하면서, 새 기능을 추가하려는 상황
🎯 시나리오 예시
회사에서는 모든 로그를 LogSaver 인터페이스를 통해 저장합니다. 그런데 외부 시스템에서 제공하는 SlackLogger는 구조가 달라서 바로 쓸 수 없습니다.
이때, 어댑터 패턴을 사용해 SlackLogger를 LogSaver 인터페이스에 맞춰 감싸면 기존 시스템에 자연스럽게 통합할 수 있습니다.
🔧 어댑터 패턴 실전 예제 (Java)
📁 1) 기존 시스템 인터페이스
public interface LogSaver {
void save(String message);
}
📁 2) 새로운 외부 클래스 (인터페이스가 다름)
public class SlackLogger {
public void sendToSlack(String channel, String message) {
System.out.println("#SLACK [" + channel + "] " + message);
}
}
📁 3) 어댑터 클래스
public class SlackLogAdapter implements LogSaver {
private SlackLogger slackLogger;
private String defaultChannel = "#payment-log";
public SlackLogAdapter(SlackLogger slackLogger) {
this.slackLogger = slackLogger;
}
@Override
public void save(String message) {
slackLogger.sendToSlack(defaultChannel, message);
}
}
📁 4) 클라이언트 코드
public class Main {
public static void main(String[] args) {
LogSaver dbLogger = new LogSaver() {
@Override
public void save(String message) {
System.out.println("DB에 저장: " + message);
}
};
dbLogger.save("결제 완료");
SlackLogger slackLogger = new SlackLogger();
LogSaver slackAdapter = new SlackLogAdapter(slackLogger);
slackAdapter.save("슬랙 로그 전송 완료");
}
}
✅ 실행 결과
DB에 저장: 결제 완료
#SLACK [#payment-log] 슬랙 로그 전송 완료
💡 실무에서 어댑터 패턴이 활용되는 예
- Spring Framework의
HandlerAdapter: 다양한 컨트롤러를 동일한 방식으로 처리 - 외부 API 응답 구조가 내부 도메인 모델과 다를 때 → 어댑터 또는 매퍼 활용
- 레거시 클래스에 새 인터페이스를 맞춰 사용할 때
🎓 어댑터 패턴과 다른 패턴의 차이점
| 패턴 | 주요 용도 |
|---|---|
| 어댑터 | 구조가 다른 두 객체 연결 |
| 데코레이터 | 기능을 동적으로 확장 |
| 프록시 | 접근 제어, 캐싱, 로깅 |
| 브리지 | 인터페이스와 구현 분리 |
✅ 어댑터 패턴 요약 정리
| 항목 | 설명 |
|---|---|
| 목적 | 호환되지 않는 인터페이스를 연결 |
| 핵심 구성 | 기존 인터페이스, 대상 클래스, 어댑터 |
| 장점 | 기존 코드 수정 없이 새 클래스 통합 가능 |
| 단점 | 클래스 수 증가, 간접 호출 복잡도 증가 |
🔚 마무리: 어댑터 패턴은 실무에서 꼭 알아야 할 필수 디자인 패턴입니다
어댑터 패턴은 코드 재사용성을 높이고, 기존 시스템의 안정성을 유지하면서도 새로운 기능을 유연하게 통합할 수 있는 매우 유용한 패턴입니다. 특히 외부 라이브러리와 통합하거나, 레거시 시스템과 새 시스템을 연결할 때 매우 큰 효과를 발휘합니다.
'IT > JAVA' 카테고리의 다른 글
| 🧱 1. 복합체 패턴이란? (0) | 2025.05.31 |
|---|---|
| 🧱 1. 브리지 패턴이란? (1) | 2025.05.31 |
| 🧱 1. 싱글턴 패턴이란? (2) | 2025.05.30 |
| 🧱 1. 프로토타입 패턴이란? (0) | 2025.05.30 |
| 🧱 자바 디자인 패턴 - 빌더 패턴 완전 정복 (0) | 2025.05.30 |
Comments
