어댑터 패턴
어댑터 패턴(Adapter Pattern)은 서로 다른 인터페이스를 가진 클래스들이 원활하게 협력할 수 있도록 중간에서 변환 역할을 하는 구조적 패턴이다. 기존 코드를 수정하지 않고도 호환되지 않는 인터페이스를 연결할 수 있어, 레거시 코드와 새로운 시스템을 통합하거나 외부 라이브러리를 적용할 때 유용하다. 이 패턴을 활용하면 코드의 재사용성을 높이고, 시스템 간의 결합도를 낮출 수 있다. 또한, 객체 지향 설계 원칙 중 단일 책임 원칙(SRP)과 개방-폐쇄 원칙(OCP)을 지키면서도 유연한 아키텍처를 구성하는 데 도움이 된다.
참고로 프록시, 데코레이터, 어댑터 패턴을 통틀어서 래퍼 패턴(Wrapper Pattern)이라고도 부른다. 이 래퍼 패턴에 해당하는 패턴들은 모두 원본 클래스를 래퍼 클래스를 통해 캡슐화하는 방식으로 동작한다. 각 패턴이 다루는 목적은 다르지만, 기본적으로는 원본 클래스의 기능을 확장하거나 조정하는 형태를 취한다.
아래는 아주 단순하지만 프론트엔드에서 자주 사용하는 어댑터 패턴이다. 백엔드와 프론트엔드가 사용하는 인터페이스가 불일치할 때, 컴포넌트를 수정하지 않아도 문제 없도록 커스텀 훅이 중간에서 변환 역할을 하고 있다.
export const useBookAdaptor = (data: Book | undefined) => {
return {
data,
book: {
isbn13: data?.book.isbn13 ?? "",
title: data?.book.title ?? "",
// 가나다 (지은이) 라마바 (옮긴이) 이런 형태로 옮
author: formatAuthor(data?.book.author),
description: data?.book.description ?? "",
cover: data?.book.cover ?? "",
categoryId: data?.book.categoryId ?? 0,
categoryName: data?.book.categoryName ?? "",
pubDate: data?.book.pubDate ?? "",
publisher: data?.book.publisher ?? "",
priceStandard: data?.book.priceStandard ?? 0,
customerReviewRank: data?.book.customerReviewRank ?? 0,
itemPage: data?.book.subInfo.itemPage ?? 0,
},
};
};
블로그의 정보
Ayden's journal
Beard Weard Ayden