4.1.1 구현 분리를 위해 인터페이스 사용
이 절에서는 계약이 무엇인지와 함께 인터페이스를 사용하여 자바 앱에서 계약을 정의하는 방법을 설명한다. 비유로 시작한 후 몇 가지 시각 자료를 이용하여 계약 개념과 언제 인터페이스를 사용하면 유용한지 알아볼 것이다. 그런 다음 4.1.2절 문제에 대한 요구 사항을 계속 살펴보고 4.1.3절에서 프레임워크 없이 이 시나리오를 해결할 것이다. 또 4.2절에서는 우리 레시피에 스프링을 첨가하고, 계약으로 기능을 분리할 때 스프링 의존성 주입이 어떻게 작동하는지 알아볼 것이다.
비유를 들어 설명하겠다. 우리는 목적지로 이동하려고 우버(Uber) 같은 차량 공유 앱을 사용한다. 일반적으로 차량 공유 서비스를 사용할 때는 차량 외관이나 운전자가 누구인지 신경 쓰지 않는다. 그저 목적지에 가기만 하면 된다. 필자는 제시간에 목적지에 도착하기만 하면 그 수단이 자동차든 우주선이든 전혀 상관없다. 차량 공유 앱은 인터페이스다. 고객은 자동차나 운전자를 요청하는 것이 아니라 이동(trip)을 요청한다. 서비스를 제공할 수 있는 차를 가진 드라이버라면 누구나 고객 요청에 응할 수 있다. 고객과 드라이버는 앱(인터페이스)으로 분리되어 있어 고객은 차량이 요청에 응답하기 전에는 드라이버가 누구인지, 어떤 차량이 자신을 태울지 알 수 없으며, 드라이버도 누구를 위해 서비스를 제공하는지 알 수가 없고 알 필요도 없다. 이와 같은 비유로 자바 객체와의 관계에서 인터페이스가 어떤 역할을 하는지 추론할 수 있다.