반응형
Adapter Pattern(어댑터 패턴) 은 서로 다른 인터페이스를 가진 객체들이 함께 동작할 수 있도록 중간에서 변환해주는 구조 디자인 패턴입니다. 외부 라이브러리나 기존 시스템과의 호환성을 유지하면서 새로운 기능을 통합하고자 할 때 유용하게 사용됩니다.
🧱 Adapter Pattern이란?
Adapter Pattern은 기존 인터페이스를 클라이언트가 기대하는 다른 인터페이스로 변환하는 역할을 합니다. 어댑터는 기존 객체를 감싸(wrapper) 클라이언트가 원하는 방식으로 동작하게 만들어줍니다.
// 기존 코드
class OldPrinter {
printOld(text) {
console.log(`Old print: ${text}`);
}
}
// 새로운 인터페이스를 기대하는 클라이언트
function clientPrint(printer) {
printer.print("Hello, Adapter!");
}
// 어댑터 생성
class PrinterAdapter {
constructor(oldPrinter) {
this.oldPrinter = oldPrinter;
}
print(text) {
this.oldPrinter.printOld(text);
}
}
const legacyPrinter = new OldPrinter();
const adapter = new PrinterAdapter(legacyPrinter);
clientPrint(adapter);
✅ 장점
- 호환성 유지: 기존 코드 수정 없이 새 코드와 연동 가능
- 유지보수성 향상: 외부 API 변화에 유연하게 대응 가능
- 확장성 확보: 다양한 인터페이스 변환이 용이함
❌ 단점
- 구조 복잡도 증가: 어댑터가 많아지면 구조가 복잡해질 수 있음
- 추가 계층 부담: 성능에 민감한 환경에서는 오버헤드 발생 가능
- 잘못된 사용 시 남용 위험: 본래 의도와 맞지 않게 억지로 맞추려다 코드 왜곡 가능
🛠️ 실전 예시: 다른 API 포맷 통합
// 기존 유저 API
const legacyUserAPI = {
fetchUserData() {
return {
user_name: "Alice",
user_age: 30
};
}
};
// 새로운 시스템에서 기대하는 구조
class UserAdapter {
constructor(legacyAPI) {
this.legacyAPI = legacyAPI;
}
getUser() {
const data = this.legacyAPI.fetchUserData();
return {
name: data.user_name,
age: data.user_age
};
}
}
const adaptedUser = new UserAdapter(legacyUserAPI);
console.log(adaptedUser.getUser());
🧩 결론
Adapter Pattern은 새로운 시스템과 기존 시스템 간의 호환성을 부드럽게 유지하면서 코드 재사용성과 유지보수성을 높여주는 중요한 설계 패턴입니다. 특히 레거시 코드 활용, 외부 라이브러리 통합, 인터페이스 호환성 문제 해결에 효과적이며, 다양한 시스템 간의 통합 환경에서 자주 활용됩니다.
반응형
'Programing > javascript' 카테고리의 다른 글
자바스크립트 Strategy Pattern (0) | 2025.04.19 |
---|---|
자바스크립트 Command Pattern (0) | 2025.04.19 |
자바스크립트 Mediator Pattern (0) | 2025.04.19 |
자바스크립트 Observer Pattern (0) | 2025.04.19 |
자바스크립트 Proxy Pattern (0) | 2025.04.19 |
자바스크립트 Facade Pattern (0) | 2025.04.19 |
자바스크립트 Decorator Pattern (0) | 2025.04.19 |
자바스크립트 Module Pattern (0) | 2025.04.19 |