재사용 단위는 릴리스 단위와 같다
아키텍처의 관점에서 단일 컴포넌트는 응집성 높은 클래스&모듈로 구성되어야 한다.
즉, 공유하는 중요한 테마나 목적이 같은 것끼리 구성되어야한다는 뜻이다.
따라서, 하나의 컴포넌트로 묶인 클래스와 모듈은 버전 번호가 같고, 동일한 릴리스로 추적된다.
동일한 시점에 동일한 이유로 변경되는 것들을 한 데 묶어라.
서로 다른 시점에 다른 이유로 변경되는 것들은 서로 분리하라.
CCP = 컴포넌트 수준의 SRP이다.
즉, 유지보수성 >>>> 재사용성 이므로, 둘다 변경의 이유가 여러개 있어서는 안된다고 말한다.
컴포넌트 사용자들을 필요하지 않는 것에 의존하게 강요하지 말라.
같이 재사용되는 경향을 가진 클래스와 모듈은 같은 컴포넌트에 포함되어야 한다.
만약, A 컴포넌트가 B 컴포넌트를 사용하게 되면, 두 컴포넌트 사이에는 의존성이 생기는데,
A 컴포넌트가 B의 모든 클래스에 대해 의존함을 확실히 알아야한다.
CRP는 어떤 클래스를 한 곳에 묶어서는 안되는지에 대해 말한다.
CRP ⊃ ISP 관계이다.
아래 그림은, 균형 다이어그램으로, 각 변은 반대쪽 꼭지점의 원칙을 포기했을때 감수해야하는 비용을 나타낸다.
클래스를 묶어 컴포넌트를 만들때, 재사용성과 개발 가능성이라는 상충하는 힘을 반드시 고려해야한다. 애플리케이션 요구에 맞게 이 두 힘의 균형을 잡는 일은 중요하다.
주로, 프로젝트의 초점이 개발 가능성에서 재사용성으로 바뀌고, 그에 따라 컴포넌트를 구성하는 방식도 조금씩 흐트러지고 또 진화한다.