경계

  • 외부 패키지를 내부에서 사용하려고 할 때 경계가 생기며 이 책에서는 외부 코드를 경계 인터페이스 라고 이야기 한다.
  • 외부 코드를 우리 코드에 깔끔하게 통합, 처리하는 기법과 기교가 필요하다.

1. 외부 코드 사용하기

  • 경계 인터페이스를 감싸주는 class 를 작성
    • class 는 프로그램에 필요한 인터페이스만 제공
    • 코드는 이해하기 쉽지만 오용하기 어려워짐

2. 학습 테스트(Jim NewKirk)

타사 라이브러리를 가져왔으나 사용법이 분명치 않다고 가정하자. 대개는 하루나 이틀 (아니면 더 오랫동안) 문서를 읽으며 사용법을 결정한다. 그런 다음 우리쪽 코드를 작성해 라이브러리가 예상대로 동작하는지 확인한다. 때로는 우리 버그인지 라이브러리 버그인지 찾아내느라 오랜 디버깅으로 골치를 앓는다. 이런 상황은 그리 놀랍지도 않다.

  • 먼저 간단한 테스트 케이스를 작성해서 외부 코드를 익힘
  • 학습 테스트는 API를 사용하려는 목적에 초점을 맞춤
외부 라이브러리 익히기(log4j 익히기)
  1. 문서를 자세히 읽기 전에 첫번째 테스트 케이스를 작성한다.
  2. 뭔가 부족해서 오류가 발생한다.
  3. 문서를 좀 더 읽는다.
  4. 테스트 케이스를 보강 후 다시 돌린다.
  5. 오류가 발생한다.
  6. 문서를 더 읽거나 구글 검색을 한 후 다시 시도한다.
  7. 내부에서는 필요 없는 인수를 제거해가며 테스트를 계속 한다.
학습 테스트는 공짜 이상이다.
  • 필요한 지식만 확보하는 손쉬운 방법
  • 이해도를 높여주는 정확한 실험
  • 패키지 새 버전이 나온다면 학습 테스트를 돌려 차이가 있는지 확인 함

3. 존재하지 않는 코드 사용

  • 아는 코드와 모르는 코드를 분리하는 경계
  • 예)
    • API가 나오지도 않고 정의도 되지 않았을때 당장 작업을 시작해야한다면 ADAPTER 패턴으로 API 사용을 캡슐화해 API가 바뀔 때 수정할 코드를 한곳으로 모은다.

4. 깨끗한 경계

  • 경계에 위치하는 코드는 깔끔히 분리함
  • 외부 패키지를 호출하는 코드를 가능한 줄여 경계를 관리
    • 새로운 class로 경계를 감쌈
    • ADAPTER 패턴 사용
  • 장점
    • 가독성, 일관성, 유연성이 높아짐

      우리가 원하는 인터페이스를 패키지가 제공하는 인터페이스로 변환하자. 어느 방법이든 코드 가독성이 높아지며, 경계 인터페이스를 사용하는 일관성도 높아지며, 외부 패키지가 변했을 때 변경할 코드도 줄어든다.