개발자들은 종종 본인이 가장 익숙한 언어를 이용하여 컴포넌트 간의 계약 관계를 기술하곤 한다.
클래스 내의 메서드를 정의하기 위해서 베이스 클래스나 인터페이스를 정의하고 이렇게 정의된
내용을 기반으로 코딩을 한다. 이러한 방식도 대체로 유효한 접근 방법이지만 함수를 매개변수로
취하는 방식을 활용한다면 기존의 컴포넌트나 라이브러리와 함께 사용해야 하는 코드를 개발할 때
상당히 큰 도움이 된다. 함수를 매개변수로 취한다는 것은 개발자가 더 이상 구상 타입을 작성할
필요가 없으며, 오히려 추상화된 정의를 통해 종속성을 다루는 것을 의미한다.
인터페이스와 클래스를 구분하는 것에는 반드시 익숙해져야 한다. 하지만 때로는 인터페이스를 정의
하고 구현하는 것조차 성가신 경우가 있으며 전통적인 객체지향 기법과는 다른 기법을 사용하여
API를 좀 더 단순하게 만들 수 있다. 실제로 델리게이트를 사용하여 컴포넌트의 계약을 기술하면
클라이언트 측에서 코드를 사용하기가 쉬워진다.
다른 개발자가 사용할 코드를 작성하는 경우 우리는 의도하지 않은 가정을 하게 되고 다양한 의존성
문제를 다룰 수밖에 없는데, 이러한 가정과 의존성 문제를 우리가 작성할 코드에서 분리하는 것은
상당히 까다로운 작업이다. 이 두가지 문제가 코드에 미치는 영향은 실로 다양하다. 먼저 작성할 코드
가 다른 부분에 의존하면 할수록 단위 테스트를 수행하기 어렵고, 다른 환경에서 코드를 재사용하기
가 어려워진다. 한편 우리가 작성한 코드를 사용할 다른 개발자가 흔히 사용하는 구현 패턴과 유사하
게 다가가면 갈수록 구현 시의 제약 조건은 점점 더 많아진다.