이번 장에서 말하는 경계란 오픈 소스와 같은 외부의 코드를 말하며, 어떻게 본인이 개발 중인 코드와 깔끔하게 통합시킬지에 대해 설명한다.
인터페이스 제공자는 기능의 핵심을 벗어나지 않는 선에서 최대한 많은 사람들이 사용할 수 있도록 설계를 하고, 사용자는 본인이 원하는 기능만을 사용하기를 바란다.
자바의 Map
같은 경우, 사용자에게 put
, get
, clear
, size
, remove
등 다양한 기능을 제공한다.
하지만 사용자가 이 Map
을 이용해 작업을 마친 뒤 다른 사용자에게 다시 제공한다고 생각해보자.
재가공된 Map
을 제공받은 또다른 사용자는 Map
에 대한 모든 권한을 가지게 된다.
이런 문제점을 해결하기 위한 방법으로 Wrapper Class
를 통해 캡슐화 하는 방법을 언급하고 있다.
캡슐화를 통해 새로운 인터페이스를 제공하면 다음과 같은 이점을 얻을 수 있다.
Map
의 인터페이스가 변해도 나머지 프로그램에는 영향을 미치지 않는다.새로운 API를 사용하기 위해서는 학습이 필요하다.
학습 과정에서 작성하는 학습 테스트는 단순히 API에 대한 학습 그 이상의 효과를 준다.
경계에 위치하는 코드는 깔끔히 분리한다. 또한 기대치를 정의하는 테스트 케이스도 작성한다.
통제가 불가능한 외부 패키지에 의존하는 대신 통제가 가능한 우리 코드에 의존하는 편이 훨씬 좋다.
경계를 잘 설계한 코드라면 외부의 인터페이스에 휘둘릴 일도 없고 추후에 리팩토링하는데도 적은 비용이 든다.
또한 코드 가독성도 높아지고 휴먼 폴트를 줄일 수 있게 된다.