반응형
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);
}
}
반응형
'IT 기본지식' 카테고리의 다른 글
디미터 법칙 정리 : 객체와 자료구조 (0) | 2025.05.05 |
---|---|
Git Flow vs Github Flow : 브랜치 전략 (0) | 2024.05.03 |
Cookie vs LocalStorage vs SessionStorage : 차이점은 무엇일까? (0) | 2023.12.26 |
CORS(Cross-Origin Resource Sharing)에 대하여 (0) | 2023.12.08 |
JSON Web Token(JWT) 에 대해 살펴보자 (0) | 2023.10.04 |
댓글