[Book - Clean Code] 8. 경계
외부 코드 사용하기
1
2
3
Map<String, Sensor> new HashMap<Sensor>();
...
Sensor s = sensors.get(sensorId);
“Map<String, Sensor>가 사용자에게 필요하지 않은 기능까지 제공한다”는 문제는 해결하지 못한 코드이다.
Map<String, Sensor> 인스턴스를 여기저기로 넘긴다면, Map 인터페이스가 변할 경우, 수정할 코드가 상당히 많아진다.
아래 Map을 좀 더 깔끔하게 사용한 코드를 보자.
Sensors 사용자는 제네릭스가 사용되었는지 여부에 신경 쓸 필요가 없다.
즉, 제네릭스의 사용 여부는 Sensors 안에서 결정된다.
1
2
3
4
5
6
7
8
9
public class Sensors {
private Map sensors = new HashMap<>();
public Sensor getById(String id) {
return (Sensor) sensors.get(id);
}
...
}
경계 인터페이스인 Map을 Sensors 안으로 숨긴다.
따라서 Map 인터페이스가 변하더라도 나머지 프로그램에는 영향을 미치지 않는다.
즉, 제네릭스를 사용하든 하진 않든 더 이상 문제가 안 된다.
Senesors 클래스 안에서 객체 유형을 관리하고 변환하면 되기 때문이다.
Map과 같은 경계 인터페이스를 이용할 때는 이를 이용하는 클래스나 클래스 계열 밖으로 노출되지 않도록 주의한다.
깨끗한 경계
외부 패키지를 호출하는 코드를 가능한 줄여 경계를 관리하자.
새로운 클래스로 감싸거나, ADAPTER 패턴을 사용하여 원하는 인터페이스를 패키지가 제공하는 인터페이스로 변환해 보자.
This post is licensed under CC BY 4.0 by the author.