인터페이스 분리 원칙
이 원칙은 C ++, 자바 같은 인터페이스 기반 언어 환경에서 비롯되었다. 이들 언어에서 인터페이스란 클래스에서 어떤 기능을 ‘구현’ 하지 않고(명칭, 파라미터, 반환 타입을) ‘서술’ 만 한 코드 조각이다.
기능이 많은 인터페이스는 더 작게 응축시킨 조각으로 나누어야 한다는 발상이다. 인터페이스 사용부(consumer)는 ‘뚱뚱한’ 전체가 아니라 아주 작은 인터페이스 하나만 바라보면 된다.
물론 모듈 간 연결 폭을 최소화하는 방향으로 가야 한다. 전에도 일렀듯이 통신 채널을 줄이는 건 덩치 큰 자바스크립트 시스템의 중요한 관리 포인트다.
그런데 잠깐! 자바스크립트는 클래스도, 인터페이스도 없지 않은가? 그럼 자바스크립트 개발자는 이 원칙의 빛을 볼 수 없다는 소린가?
그렇지 않다. 자바스크립트에서 이 원칙을 어떻게 실현하는지는 16장에 나와 있다. 짧게 이야기하면, 인터페이스 분리 원칙의 정신을 실현하려면 함수가 기대하는 인자가 무엇인지 명확히 하고 그 기대치를 최소화해야 한다. 이럴 때도 덕 타이핑이 도움된다. 특정 타입의 인자를 바라기보다는 이 타입에서 실제로 필요한 프로퍼티가 더러 있을 거라 기대하는 것이다. 16~ 21장에서 구현할 ContractRegistry는 기대치를 구체화하고 강제하는 정규 방안을 제시한다. ContractRegistry가 입맛에 맞지 않더라도 언제든 인자 검사 코드를 직접 작성하거나 주석을 달면 된다!