컴포넌트 응집도
컴포넌트 응집도의 세 가지 원칙
- 재사용/릴리스 등가 원칙 (REP, Reuse/Release Equivalence Principle)
- 공통 폐쇄 원칙 (CCP, Common Closure Principle)
- 공통 재사용 원칙 (CRP, Common Reuse Principle)
재사용/릴리스 등가 원칙 (REP, Reuse/Release Equivalence Principle)
- "재사용 단위는 릴리스 단위와 같다."
- 컴포넌트가 릴리스 절차를 통해 추적 관리되지 않거나 릴리스 번호가 부여되지 않으면 재사용할 수 없고, 컴포넌트들이 서로 호환되는지 보증할 수 없다.
- 또한, 릴리스 번호를 통해 새로운 버전이 언제 출시되고 무엇이 변했는지 개발자가 알 수 있어야 한다.
- 설계와 아키텍처 관점에서 단일 컴포넌트는 응집성 높은 클래스와 모듈로 구성되어야 한다.
- 하나의 컴포넌트로 묶인 클래스와 모듈은 함께 릴리스할 수 있어야하고, 버전 번호가 같아야하며, 동일한 릴리스로 추적관리되어 릴리스 문서에 포함되어야 한다.
공통 폐쇄 원칙 (CCP, Common Closure Principle)
- "동일한 이유/시점에 변경되는 클래스를 같은 컴포넌트에 묶어라. 서로 다른 이유/시점에 변경되는 클래스는 다른 컴포넌트로 분리해라."
- 단일 책임 원칙(SRP, Single Responsibility Principle)을 컴포넌트 관점에서 작성한 설계 원칙이다.
- 단일 컴포넌트는 변경의 이유가 하나이여야 한다.
- 변경을 단일 컴포넌트로 제한할 수있다면 해당 컴포넌트만 재배포하면 된다.
- 이를 통해 소프트웨어 릴리스, 재검증, 배포하는 일과 관련된 작업을 최소화할 수 있다.
- 이 원칙은 동일한 유형의 변경에 대해 닫혀 있는 클래스를 하나의 컴포넌트로 묶는다는 관점에서 개방 폐쇄 원칙(OCP, Open-Closed Principle)과도 연관이 있다
공통 재사용 원칙 (CRP, Common Reuse Principle)
- "컴포넌트 사용자들을 필요하지 않는 것에 의존하게 강요하지 말라."
- 인터페이스 분리 원칙(ISP, Interface Segregation Principle)의 컴포넌트 관점
컴포넌트에 포함시켜야하는 클래스 관점
- 대체로 재사용 가능한 클래스는 해당 모듈의 클래스들과 유기적으로 동작하기 때문에 같이 사용되는 경향이 있는 클래스와 모듈은 같은 컴포넌트 안에 속해야 한다.
컴포넌트에 포함되지 않아야하는 클래스 관점
- 사용하는 컴포넌트가 사용되는 컴포넌트의 하나에 클래스에만 의존한다고 해서 컴포넌트 간의 의존 관계가 약해지는 것은 아니다.
- 의존하는 컴포넌트가 있다면 해당 컴포넌트의 모든 클래스에 의존함을 확실히 인지하고, 강하게 결합되지 않은 클래스들을 동일한 컴포넌트에 위치시키지 않아야 한다.
컴포넌트 응집도에 대한 균형 다이어그램
- 재사용/릴리스 등가 원칙(REP)와 공통 폐쇄 원칙(CCP)는 Include Principle으로 컴포넌트를 더욱 크게 만든다.
- 공통 재사용 원칙(CRP)은 Exclude Principle으로 컴포넌트를 더욱 작게 만든다.
- 위 균형 다이어그램에서 Edge는 반대쪽 꼭지점에 있는 원칙을 포기했을 때, 감수해야되는 비용을 의미한다.
- 균형 다이어그램에서 개발팀이 관심 가지고 있는 부분이 어느 곳임을 알고, 소프트웨어의 성숙도에 따라 관심 기준이 변경될 수 있음을 인지해야 한다.
서적 : http://www.yes24.com/Product/Goods/77283734
'Architecture' 카테고리의 다른 글
[Clean Architecture 정리] 14장. 컴포넌트 결합 (2) (0) | 2022.07.28 |
---|---|
[Clean Architecture 정리] 14장. 컴포넌트 결합 (1) (0) | 2022.07.27 |
[Clean Architecture 정리] 12장. 컴포넌트 (0) | 2022.07.24 |
[Clean Architecture 정리] 11장. DIP (0) | 2022.07.23 |
[Clean Architecture 정리] 10장. ISP (0) | 2022.07.23 |
댓글