더북(TheBook)

인터페이스 분리 원칙

이 원칙은 C ++, 자바 같은 인터페이스 기반 언어 환경에서 비롯되었다. 이들 언어에서 인터페이스란 클래스에서 어떤 기능을 ‘구현’ 하지 않고(명칭, 파라미터, 반환 타입을) ‘서술’ 만 한 코드 조각이다.

기능이 많은 인터페이스는 더 작게 응축시킨 조각으로 나누어야 한다는 발상이다. 인터페이스 사용부(consumer)는 ‘뚱뚱한’ 전체가 아니라 아주 작은 인터페이스 하나만 바라보면 된다.

물론 모듈 간 연결 폭을 최소화하는 방향으로 가야 한다. 전에도 일렀듯이 통신 채널을 줄이는 건 덩치 큰 자바스크립트 시스템의 중요한 관리 포인트다.

그런데 잠깐! 자바스크립트는 클래스도, 인터페이스도 없지 않은가? 그럼 자바스크립트 개발자는 이 원칙의 빛을 볼 수 없다는 소린가?

그렇지 않다. 자바스크립트에서 이 원칙을 어떻게 실현하는지는 16장에 나와 있다. 짧게 이야기하면, 인터페이스 분리 원칙의 정신을 실현하려면 함수가 기대하는 인자가 무엇인지 명확히 하고 그 기대치를 최소화해야 한다. 이럴 때도 덕 타이핑이 도움된다. 특정 타입의 인자를 바라기보다는 이 타입에서 실제로 필요한 프로퍼티가 더러 있을 거라 기대하는 것이다. 16~ 21장에서 구현할 ContractRegistry는 기대치를 구체화하고 강제하는 정규 방안을 제시한다. ContractRegistry가 입맛에 맞지 않더라도 언제든 인자 검사 코드를 직접 작성하거나 주석을 달면 된다!

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.