[Clean Code] 8장 | 경계

Jiwoo Kim·2020년 11월 13일
0

Clean Code 정독하기

목록 보기
8/13
post-thumbnail

🚩 외부 코드를 기존 코드에 깔끔하게 통합하는 기법

💻 외부 코드 사용하기

예) java.util.Map

  • Generics를 사용하여 코드 가독성을 높일 수 있다.
  • 하지만 인터페이스가 언제든 변할 수 있기 때문에 Generics에 의존하는 것도 위험하다.
  • Map(인터페이스)를 사용할 클래스 안에서 관리하고 변환하면 설계 규칙과 비즈니스 규칙을 강제할 수 있다.
public class Sensors {
  private Map sensors = new HashMap();
  
  public Sensor getById(String id) {
    return (Sensor) sensors.get(id);
  }
  
  ...
}

💻 경계 살피고 익히기

  • 학습 테스트
    • 외부 코드와 기존 코드를 통합하기 전, 간단한 테스트 케이스를 작성해 외부 코드를 익힌다.
    • 테스트 케이스를 통해 얻은 지식을 독자적인 클래스로 캡슐화한다.

💻 아직 존재하지 않는 코드를 사용하기

  • 필요한 외부 기능과 인터페이스를 자체적으로 정의하라.
  • 기존 코드와 외부 인터페이스 경계를 분리하라.
  • 기존 코드, 외부 인터페이스, 경계 테스트 케이스를 각각 작성하고 테스트하라.

💻 깨끗한 경계

  • 경계에 위치하는 코드는 깔끔히 분리하라.
  • 외부 패키지를 호출하는 코드를 가능한 줄여 경계를 관리하라.

📝 느낀점

외부 API를 별개의 Wrapper 클래스로 캡슐화하는 방법을 새로 알게 되었다. 필요할 때마다 직접적으로 호출하기보다는, 기능을 Wrapper 클래스 안에 정의하고 그 안에서만 외부 API를 활용하는 것이 바람직한 것 같다.

자바에서 기본적으로 제공하는 인터페이스조차도 언제든 변경될 수 있으니, 항상 캡슐화에 신경을 써야 한다는 점이 인상깊었다. 나 역시 콜렉션 패키지를 사용할 때 당연하게 Generics로 타입을 지정하고 여기저기서 쓰고는 했는데, 캡슐화하는 방법을 시도해봐야 겠다는 생각이 들었다. 또, HTTP Response Body에 Map으로 객체를 담아 보내는 것을 종종 보았는데, 이렇게 공개 API의 인수로 넘기는 부분은 어떻게 바꾸는 것이 좋은지 궁금하다. 직접 구현해보며 최선의 방법을 찾아봐야겠다.

0개의 댓글