외부코드 사용하기
- Map과 같은 경계인터페이스를 인수로 넘기거나 반환값으로 사용하지 않는다.
- 대신 클래스로 감싼다. 필요한 인터페이스만을 제공하고, 변화의 영향을 최소화 시킨다.
public class Sensors {
// 경계의 인터페이스(이 경우에는 Map의 메서드)는 숨겨진다.
// Map의 인터페이스가 변경되더라도 여파를 최소화할 수 있다. 예를 들어 Generic을 사용하던 직접 캐스팅하던 그건 구현 디테일이며 Sensor클래스를 사용하는 측에서는 신경쓸 필요가 없다.
// 이는 또한 사용자의 목적에 딱 맞게 디자인되어 있으므로 이해하기 쉽고 잘못 사용하기 어렵게 된다.
private Map sensors = new HashMap();
public Sensor getById(String id) {
return (Sensor)sensors.get(id);
}
//snip
}
경계 살피고 익히기
- 외부코드를 익히고 우리시스템에 통합시키기 위해서 학습테스를 한다.
- 통제된 환경에서 API를 제대로 이해했는지 확인 할 수 있다.
학습테스트는 공짜 이상이다
- 기존 시스템과 잘 통합 된 API 라도 새 버전이 나온경우 테스트를 다시 한다.
- 기존 시스템과의 호환성, 변경사항 이해가 빨라진다.
존재하지 않는 코드를 사용하기
- 모르는 코드를 사용해야 할때 자체 인터페이스를 만든다.
- ADAPTER 패턴을 사용한다. (추가적인 이해가 필요하다)
깨끗한 경계
- 경계에서 변화를 최소화 해야한다.
- 테스트 케이스를 항상 작성하라
- 경계는 감싸거나, adapter 패턴을 사용하라