Clean Code 스터디 내용 정리; 8장 경계
오픈 소스, 외부 패키지 등의 외부 코드를 우리 코드에 깔끔하게 통합하는 기법과 기교에 대해 설명한다.
1. 새로운 클래스로 경계를 감싼다.
- 경계 인터페이스를 이용할 때 여기 저기 인수로 넘기고 반환값으로 사용하면 인터페이스가 변할 경우 수정할 코드가 상당히 많아진다.
- 따라서 경계 인터페이스의 인스턴스는 이를 이용하는 클래스나 클래스 계열 밖으로 노출되지 않도록 주의해야 한다.
- 새로운 클래스로 경계 인터페이스를 캡슐화하면 해당 클래스 안에서 객체 유형을 관리하고 변환하기 때문에 인터페이스의 변경에 따른 영향을 통제할 수 있다.
// 1. Object를 변환하는 코드가 여러 번 중복되기에 깨끗한 코드가 아님.
Map sensors = new HashMap();
Sensor s = (Sensor)sensors.get(sensorId);
// 2. 사용자에게 필요하지 않은 기능까지 제공하고, 프로그램에서 인스턴스를 여기 저기로 넘기면
// Map 인터페이스가 변할 대 수정할 코드가 많아짐.
Map<String,Sensor> sensors = new HashMap<Sensor>();
Sensor s = sensors.get(sensorId);
// 프로그램에 필요한 인트페이스만 제공하고 Map 인터페이스가 변해도 나머지 프로그램에는 영향 x
public class Sensors {
private Map sensors = new HashMap();
public Sensor getById(String id) {
return (Sensor) sensors.get(id);
}
}
2. 학습테스트로 경계를 익힌다.
- 학습 테스트란 간단한 테스트 케이스를 작성해 외부 코드를 익히는 테스트로, 투자하는 노력보다 얻는 성과가 더 크다.
- 사용하려는 목적에 초점을 맞추어 필요한 기능을 구현하는 데에 요구되는 만큼 외부 API를 이해하는 것에 도움을 받을 수 있다.
- 패키지가 예상대로 도는지 검증하기 때문에 우리 코드가 패키지의 새 버전과 호환되는지 확인하고 이전하기 쉬워진다.
3. ADAPTER 패턴을 사용한다.
어떻게 구현될지 정해지지 않은, 모르는 코드를 사용해야 할 때 사용할 수 있는 방법이다.
- 자체적으로 원하는 기능을 제공하는 인터페이스를 구현하여 사용한다.
- 모르던 코드가 정의된 후에는 Adapter를 구현해 API와 우리의 인터페이스 간의 간극을 메운다.
- API를 캡슐화해서 사용하기 때문에 API가 바뀔 때 수정할 코드는 Adapter에만 한정된다.
우리가 통제하지 못하는 외부 코드나 모르는 코드를 사용할 때는 향후 변경 비용이 지나치게 커지지 않도록 신경써야 한다. 경계에 위치하는 코드는 깔끔히 분리하고 외부 패키지를 호출하는 코드를 최소한으로 해 경계를 관리하자. 통제가 불가능한 것보다는 통제가 가능한 우리 코드에 의존하는 편이 훨씬 좋다.
'STUDY > Books' 카테고리의 다른 글
[Clean Code] 10장 클래스 (0) | 2021.05.30 |
---|---|
[Clean Code] 9장 단위 테스트 (0) | 2021.05.25 |
[Clean Code] 7장 오류 처리 (0) | 2021.05.23 |
[Clean Code] 6장 객체와 자료 구조 (0) | 2021.05.21 |
[Clean Code] 5장 형식 맞추기 (0) | 2021.05.18 |