8장 경계
📖 통제가 불가능한 외부 패키지에 의존하는 대신 통제가 가능한 우리 코드에 의존하는 편이 훨씬 좋다.
목차
🗒️ 책에서 기억하고 싶은 내용
외부 코드 사용하기
Map<String, Sensor> sensors = new HashMap<Sensors>();
프로그램에서 Map<String, Sensors> 인스턴스를 여기저기로 넘긴다면, Map 인터페이스가 변할 경우, 수정할 코드가 상당히 많아진다.
public class Sensors {
private Map sensors = new HashMap();
public Sensor getById(String id) {
return (Sensor) sensors.get(id);
}
//이하 생략
}
Map을 좀 더 깔끔하게 사용한 코드다.
● Sensors 사용자는 제네릭스가 사용되었는지 여부에 신경 쓸 필요가 없다.
○ 제네릭스의 사용 여부는 Sensors 안에서 결정한다.
● 경계 인터페이스인 Map을 Sensors 안으로 숨긴다.
○ 따라서 Map 인터페이스가 변하더라도 나머지 프로그램에는 영향을 미치지 않는다.
● 또한 Sensors 클래스는 프로그램에 필요한 인터페이스만 제공한다.
○ 그래서 코드는 이해하기는 쉽지만 오용하기는 어렵다.
● Map 클래스를 사용할 때마다 위와 같이 캡슐화하라는 소리가 아니다. 경계 인터페이스를 여기저기 넘기지 말라는 말이다.
○ Map 인스턴스를 공개 API의 인수로 넘기거나 반환값으로 사용하지 않는다.
경계 살피고 익히기
외부 코드를 익히기는 어렵다. 외부 코드를 통합하기도 어렵다.
두 가지를 동시에 하기는 두 배나 어렵다.
곧바로 우리쪽 코드를 작성해 외부 코드를 호출하는 대신 먼저 간단한 테스트 케이스를 작성해 외부 코드를 익히면 어떨까?
: 학습 테스트
학습 테스트는 공짜 이상이다
실제 코드와 동일한 방식으로 인터페이스를 사용하는 테스트 케이스가 필요하다.
이런 경계 테스트가 있다면 패키지의 새 버전으로 이전하기 쉬워진다.
🗒️ 소감
자바 5가 제네릭스를 지원하면서 Map 인터페이스가 변해 실제로 제네릭스 사용을 금지하는 시스템을 보았다는 것을 읽고, 외부 코드 사용 시 경계를 명확히 할 필요성을 느꼈다.
'경계를 살피고 익히기', 'log4j 익히기', '학습 테스트는 공짜 이상이다'를 읽고 학습 테스트의 유용함을 알게 되었다.
외부 코드를 사용하며 개발 공부 중인 것이 있어 바로 학습 테스트를 적용해 볼 예정이다.
🗒️ 궁금하거나 어려웠던 내용
● '아직 존재하지 않는 코드를 사용하기'에 나온 ADAPTER 패턴에 대해 좀 더 자세히 알고 싶다.
● 켄트 벡 『 TDD 』
'도서 > Clean Code' 카테고리의 다른 글
[Clean Code/클린 코드] 9장 단위 테스트 (2) | 2023.12.18 |
---|---|
[Clean Code/클린 코드] 7장 오류 처리 (0) | 2023.12.04 |
[Clean Code/클린 코드] 6장 객체와 자료 구조 (0) | 2023.12.04 |
[Clean Code/클린 코드] 5장 형식 맞추기 (0) | 2023.12.04 |
[Clean Code/클린 코드] 4장 주석 (2) | 2023.12.04 |