본문 바로가기
IT 기본지식

ADAPTER 패턴 정리

by 내기록 2025. 5. 8.
반응형

 

 

Adapter 패턴이란?

서로 다른 인터페이스를 가진 객체들을 연결해주는 중간 다리 역할을 하는 디자인 패턴입니다.

즉, 코드 A와 B가 있을 때 A가 B의 인터페이스를 그대로 쓸 수 없다면 Adapter라는 중간 클래스를 만들어서 A가 이를 통해 B를 사용할 수 있게 합니다.

 

언제 사용하는가?

  • 기존 코드(A)에서 새로운 코드(B)를 쓰고싶지만 두 코드의 메서드명, 동작 방식이 맞지 않을 때
  • ☑️ 라이브러리, 레거시 시스템, 외부 API와 연결할 때

 

 

책에서 나온 예제로 Adapter 패턴을 이해해보면,

상황 : 우리는 송신기의 하위 시스템을 개발해야하지만, 송신기 모듈 쪽은 아직 인터페이스조차 정의하지 못한 상태입니다.

우리가 송신기 모듈에게 원하는 기능은 "지정한 주파수를 이용해 스트림에서 들어오는 자료를 아날로그 신호로 전송" 하는 것입니다.

 

위 다이어그램을 살펴보면,

  • CommunicationController : 송신 기능을 쓰려는 쪽 (우리 코드), 우리에게 필요한 인터페이스 정의
  • Transmitter(interface) : 우리가 기대하는 표준 인터페이스이며, transmit(frequency, stream) 메서드를 제공한다.
  • Fake Transmitter : 테스트용 가짜 송신기
  • Transmitter Adapter : 실제 송신 API와 Transmitter 인터페이스를 연결한다. (송신기 모듈팀이 API를 정의하면 구현)
  • Transmitter API (future) : 앞으로 연결할 외부 송신기 API (송신기 모듈팀이 생성한 API)

 

정리하면,

Adapter 패턴으로 API 사용을 캡슐화하여 API가 바뀔 때 수정할 코드를 한곳으로 모을 수 있습니다.

즉, 외부 API(Transmitter API)가 바뀌어도, 우리는 Transmitter Adapter만 고치면 되는 구조입니다.

따라서 결합도를 낮추고, 유지보수를 훨씬 쉽게 만들어줍니다.

그리고 테스트할 때는 Fake Transmitter를 사용하여 빠르고 안전하게 테스트할 수 있습니다.

 

코드로 정리하면, 다음과 같습니다.

Transmitter 인터페이스 : 필요한 함수 정의

public interface Transmitter {
    void transmit(String frequency, String stream);
}

 

FakeTransmitter (테스트용 가짜 송신기) :  Fake transmit 구현

public class FakeTransmitter implements Transmitter {
    @Override
    public void transmit(String frequency, String stream) {
        System.out.println("[Fake] Sending " + stream + " at " + frequency);
    }
}

 

TransmitterAdapter (진짜 송신기 어댑터) : Real transmit 구현

public class TransmitterAdapter implements Transmitter {
    private TransmitterAPI transmitterAPI;

    public TransmitterAdapter(TransmitterAPI transmitterAPI) {
        this.transmitterAPI = transmitterAPI;
    }

    @Override
    public void transmit(String frequency, String stream) {
        transmitterAPI.sendSignal(frequency, stream);
    }
}

 

반응형

댓글