경계
경계
-
외부 패키지를 내부에서 사용하려고 할 때 경계가 생기며 이 책에서는 외부 코드를 경계 인터페이스 라고 이야기 한다.
-
외부 코드를 우리 코드에 깔끔하게 통합, 처리하는 기법과 기교가 필요하다.
1. 외부 코드 사용하기
- 경계 인터페이스를 감싸주는 class 를 작성
- class 는 프로그램에 필요한 인터페이스만 제공
- 코드는 이해하기 쉽지만 오용하기 어려워짐
2. 학습 테스트(Jim NewKirk)
타사 라이브러리를 가져왔으나 사용법이 분명치 않다고 가정하자. 대개는 하루나 이틀 (아니면 더 오랫동안) 문서를 읽으며 사용법을 결정한다. 그런 다음 우리쪽 코드를 작성해 라이브러리가 예상대로 동작하는지 확인한다. 때로는 우리 버그인지 라이브러리 버그인지 찾아내느라 오랜 디버깅으로 골치를 앓는다. 이런 상황은 그리 놀랍지도 않다.
- 먼저 간단한 테스트 케이스를 작성해서 외부 코드를 익힘
- 학습 테스트는 API를 사용하려는 목적에 초점을 맞춤
외부 라이브러리 익히기(log4j 익히기)
- 문서를 자세히 읽기 전에 첫번째 테스트 케이스를 작성한다.
- 뭔가 부족해서 오류가 발생한다.
- 문서를 좀 더 읽는다.
- 테스트 케이스를 보강 후 다시 돌린다.
- 오류가 발생한다.
- 문서를 더 읽거나 구글 검색을 한 후 다시 시도한다.
- 내부에서는 필요 없는 인수를 제거해가며 테스트를 계속 한다.
학습 테스트는 공짜 이상이다.
- 필요한 지식만 확보하는 손쉬운 방법
- 이해도를 높여주는 정확한 실험
- 패키지 새 버전이 나온다면 학습 테스트를 돌려 차이가 있는지 확인 함
3. 존재하지 않는 코드 사용
- 아는 코드와 모르는 코드를 분리하는 경계
- 예)
- API가 나오지도 않고 정의도 되지 않았을때 당장 작업을 시작해야한다면
ADAPTER 패턴
으로 API 사용을 캡슐화해 API가 바뀔 때 수정할 코드를 한곳으로 모은다.
- API가 나오지도 않고 정의도 되지 않았을때 당장 작업을 시작해야한다면
4. 깨끗한 경계
- 경계에 위치하는 코드는 깔끔히 분리함
- 외부 패키지를 호출하는 코드를 가능한 줄여 경계를 관리
- 새로운 class로 경계를 감쌈
- ADAPTER 패턴 사용
- 장점
- 가독성, 일관성, 유연성이 높아짐
우리가 원하는 인터페이스를 패키지가 제공하는 인터페이스로 변환하자. 어느 방법이든 코드 가독성이 높아지며, 경계 인터페이스를 사용하는 일관성도 높아지며, 외부 패키지가 변했을 때 변경할 코드도 줄어든다.
- 가독성, 일관성, 유연성이 높아짐