노트

어댑터 패턴

Adapter

설계#pattern · 연결된 개념 7개

쉽게 말하면

어댑터 패턴은 해외여행 때 챙기는 플러그 변환기 같은 거예요. 멀쩡한 기계인데 콘센트 모양만 안 맞을 때 가운데 끼워 이어 주니까, 업체가 바뀌어도 변환기만 갈아 끼우면 돼요.

비유가 깨지는 곳 변환기는 모양만 바꾸는데, 코드 어댑터에는 업무 규칙을 슬쩍 넣고 싶어지기 쉬워요. 그러면 책임이 흐려지니 변환만 하고, 기능을 더하는 건 데코레이터의 몫으로 둬요.

쓸 수 있는 객체가 있는데 인터페이스가 맞지 않을 때, 중간에서 호출을 받아 실제 객체가 알아듣는 형태로 바꿔 주는 패턴. 전원 플러그 변환기와 같다.

interface PaymentGateway { pay(orderId: string, amount: number): Promise<void> }
 
class SomePaySdkAdapter implements PaymentGateway {
  constructor(private sdk: SomePaySdk) {}
  async pay(orderId: string, amount: number) {
    await this.sdk.requestPayment({ merchantUid: orderId, price: amount })
  }
}
  • 결제·지도·메시징처럼 업체마다 API가 다른 외부 SDK를 내부 인터페이스 하나로 맞출 때 자주 쓴다. 업체를 바꿔도 어댑터만 갈아 끼우면 된다
  • 내부 코드가 외부 모델에 오염되지 않게 막는 경계 역할을 한다. 바깥 API 응답을 내부 타입으로 바꾸는 계층도 같은 생각이다(스프링에서 외부 API 호출, 바운디드 컨텍스트)
  • 테스트에서 외부 서비스를 가짜로 바꾸기 쉬워진다(의존성 역전 원칙)
  • 어댑터가 단순 변환을 넘어 업무 규칙을 품기 시작하면 책임이 흐려진다. 변환만 한다

인터페이스를 바꾸는 것이 어댑터, 그대로 두고 기능을 더하는 것이 데코레이터 패턴, 여러 개를 하나의 단순한 창구로 묶는 것이 퍼사드 패턴이다. 구조 패턴 전체는 구조 패턴.

출처: Adapter — Refactoring.Guru

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 디자인 패턴

    반복해서 나타나는 설계 문제에 대한 검증된 해결 구조와 그 이름. 복사해 쓰는 완성 코드가 아니라 객체들이 협력하는 방식을 설명하는 어휘다. 1994년 이른바 GoF(Gang of Four, 네 명의 저자)의 책 『Design Patterns: Elements of Reusable Object-Oriented Software』가 23개 패턴을 정리하며 널리 퍼졌다.

  • 전략 패턴

    같은 목적을 가진 여러 알고리즘을 각각 별도 객체(또는 함수)로 빼고, 실행할 때 그중 하나를 골라 끼우는 패턴. 호출하는 쪽은 공통 인터페이스만 안다.

  • 행동 패턴

    객체 사이의 책임 분배와 대화 방식을 정리하는 패턴들. 요청 전달, 알고리즘 교체, 상태 변화, 알림, 작업 캡슐화 같은 문제를 다룬다.

  • 상태 패턴

    객체의 행동이 현재 상태에 따라 달라질 때, 상태마다 별도 객체를 두고 현재 상태 객체에 행동을 맡기는 패턴. 상태별 조건문이 메서드마다 반복되는 문제를 푼다.

  • 커맨드 패턴

    요청이나 작업을 실행 가능한 객체로 포장하는 패턴. 작업을 값처럼 저장·전달·대기열에 넣을 수 있게 되고, 되돌리기 같은 부가 연산을 붙일 수 있다.

보기 옵션