이 설계를 어떻게 개선할 수 있을까? 객체의 책임을 변경할 때 변경된 책임을 사용하는 다른 객체까지 변경할 필요가 없도록 하고 싶다. 이 설계 문제는 DeliveryDetailsPrinter 객체에서 필요한 것과 필요한 방법을 모두 지정하기 때문에 발생한다. 앞서 설명한 것처럼 객체는 필요한 것만 지정하고 필요한 것이 어떻게 구현되는지는 전혀 알지 못해도 된다. 물론 이를 위해 인터페이스를 사용한다. 그림 4-3에서는 두 객체를 분리하려고 Sorter 인터페이스를 도입했다. DeliveryDetailsPrinter 객체는 SorterByAddress를 선언하는 대신 Sorter가 필요하다고만 지정했다. 이제 DeliveryDetailsPrinter가 요청한 작업을 해결하는 데 필요한 객체를 원하는 만큼 늘릴 수 있다. Sorter 인터페이스를 구현하는 모든 객체는 언제든지 DeliveryDetailsPrinter 객체의 의존성을 만족시킬 수 있다. 다음 그림은 인터페이스를 사용하여 분리한 후 DeliveryDetailsPrinter 객체와 SorterByAddress 객체 간 의존성을 시각적으로 표현한 것이다.