8장 경계

<aside> 💡 시스템에 들어가는 모든 소프트웨어를 직접 개발하는 경우는 드물다

</aside>

1 외부 코드 사용하기

예시) java.util.Map을 살펴보면, Map은 굉장히 다양한 인터페이스를 제공한다.

→ clear()는 Map을 사용하는 누구든 Map 내용을 지울 권한이 있다는 것을 의미한다

Map<String, Sensor> sensors = new HashMap<Sensor>();
...
Sensor s = sensors.get(sensorId);

위 코드는 “Map<String, Sensor>”가 사용자에게 필요하지 않은 기능까지 제공한다는 문제를 해결하지 못 한다.

이를 해결하기 위해, Map을 아래와 같이 숨겨주면 된다

public class Sensors {
	private Map sensors = new HashMap();
	
	public Sensor getById(String id) {
		return (Sensor) sensors.get(id);
}

경계 인터페이스인 Map이 변하더라도 나머지 프로그램에는 영향을 미치지 않는다.

Sensors 클래스 안에서 객체 유형을 관리하고 변환하기 때문이다

또한 Sensors 클래스는 프로그램에 필요한 인터페이스만 제공한다

→ 요약 : Map 인스턴스를 공개 API의 인수로 넘기거나 반환하지 않도록 주의하자

2 경계 살피고 익히기