외부의 코드를 이용할 때 우리 코드에 깔끔하게 통합해야만 한다.
학습 테스트
란 간단한 테스트 케이스를 작성해 외부 코드를 익히는 방식이다.로깅 기능을 직접 구현하는 대신 아파치의 log4j 패키지를 사용한다고 가정하자. -생략-
대략적인 테스트 케이스를 작성한다. 테스트가 실패하면 레퍼런스를 보면서 테스트 케이스를 수정해 나간다.
지정한 주파수를 이용해 이 스트림에서 들어오는 자료를 아날로그 신호로 전송하는 송신기 시스템을 예로 들자.
// 주파수와 스트림을 전송하는 인터페이스를 정의한다.
public interface Transimitter {
void transmit(Integer frequency, String stream);
}
// 외부로부터 제공받을 실제 API
public class FutureTransimitter {
void transmit(Integer frequency, String stream);
}
// 어댑터 패턴으로 API 사용 캡슐화. 수정 포인트 집결
public class TransmitterAdapter implements Transimitter {
private FutureTransmitter futureTransmitter;
public void transmit(Integer frequency, String stream) {
futureTransmitter.transmit(frequency, stream);
}
}
// 실제 API 제공 받기 전 테스트 용도로 생성
public class FakeTransmitter implements Transimitter {
public void transmit(Integer frequency, String stream) {
// ...
}
}
public class CommunicationController {
// 실제 API 제공받기 전 사용 사례
public void transmit() {
Transmitter transmitter = new FakeTransmitter();
transmitter.transmit(someFrequency, someStream);
}
// 실제 API 제공받은 후 사용 사례
public void transmit() {
Transmitter transmitter = new TransmitterAdapter();
transmitter.transmit(someFrequency, someStream);
}
}
어댑터 패턴
을 사용해 우리가 원하는 인터페이스를 외부 코드가 제공하는 인터페이스로 변환하자.