컴포넌트 사용자들을 필요하지 않는 것에 의존하게 강요하지 말라


CRP에서는 같이 재사용되는 경향이 있는 클래스와 모듈들은 같은 컴포넌트에 포함해야 한다고 말한다

개별 클래스가 단독으로 재사용되는 경우는 거의 없다

대체로 재사용 가능한 클래스는 재사용 모듈의 일부로써 해당 모듈의 다른 클래스와 상호작용하는 경우가 많다

CRP에서는 이런 클래스들이 동일한 컴포넌트에 포함되어야 한다고 말한다

이러한 컴포넌트 내부에서는 클래스들 사이에 수많은 의존성이 있으리라고 예상할 수 있다


간단한 사례로 컨테이너 클래스와 해당 클래스의 이터레이터 클래스를 들 수 있다

이들 클래스는 서로 강하게 결합되어 있기 때문에 함께 재사용된다

따라서 이들 클래스는 반드시 동일한 컴포넌트에 위치해야 한다


...


어떤 컴포넌트가 다른 컴포넌트를 사용하면, 두 컴포넌트 사이에는 의존성이 생겨난다

어쩌면 사용하는 컴포넌트가 사용되는 컴포넌트에서 단 하나의 클래스만 사용할 수도 있다

그렇다고 해서 의존성은 조금도 약해지지 않는다

사용하는 컴포넌트는 사용되는 컴포넌트에 여전히 의존한다


이 같은 의존성으로 인해 사용되는 컴포넌트가 변경될 때마다 사용하는 컴포넌트도 변경해야 할 가능성이 높다

심지어 사용되는 컴포넌트에서 발생한 변경이 사용하는 컴포넌트와는 전혀 관련 없는 경우라도 말이다


따라서 의존하는 컴포넌트가 있다면 해당 컴포넌트의 모든 클래스에 대해 의존함을 확실히 인지해야한다 (무조건 의존하게 될 터이니)


...


CRP는 ISP의 포괄적인 버전이다 ISP는 사용하지 않은 메서드가 있는 클래스에 의존하지 말라고 조언한다

CRP는 사용하지 않는 클래스를 가진 컴포너트에 의존하지 말라고 조언한다

이 두 조언은 한 문장으로 요약할 수 있다


"필요하지 않은 것에 의존하지 말라"