Post

컴포넌트 응집도

13. 컴포넌트 응집도

REP: 재사용/릴리스 등가 원칙 (Reuse/Release Equivalence Principle)

재사용 단위는 릴리스 단위와 같다

릴리스 번호가 없다면 재사용 컴포넌트들이 서로 호환되는지 보증할 방법이 없다.

릴리스 절차에는 적절한 공지와 함께 릴리스 문서 작성도 포함되어야 한다.

컴포넌트를 구성하는 모든 모듈은 서로 공유하는 중요한 테마나 목적이 있어야 한다.

CCP: 공통 폐쇄 원칙 (Common Closure Principle)

동일한 이유로 동일한 시점에 변경되는 클래스를 같은 컴포넌트로 묶어라. 서로 다른 시점에 다른 이유로 변경되는 클래스는 다른 컴포넌트로 분리하라.

대다수의 어플리케이션에서 유지보수성은 재사용성보다 훨씬 중요하다.

변경이 여러 컴포넌트에서 일어나는 것보다 단일 컴포넌트에서 일어나는 것이 더 낫다.

CCP는 변경될 가능성이 있는 클래스는 모두 한곳으로 묶을 것을 권장

이 원칙은 개방 폐쇄 원칙과도 밀접하게 관련되어 있다.

SRP와의 유사성

CCP는 컴포넌트 수준의 SRP

동일한 시점에 동일한 이유로 변경되는 것들을 한데 묶어라. 서로 다른 시점에 다른 이유로 변경되는 것들은 서로 분리하라.

CRP: 공통 재사용 원칙(Common Reuse Principle)

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

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

의존하는 컴포넌트가 있다면 해당 컴포넌트의 모든 클래스에 대해 의존함을 확실히 인지해야 한다.

한 컴포넌트에 속한 클래스들을 더 작게 그룹지을 수 없다.

강하게 결합되지 않은 클래스들을 동일한 컴포넌트에 위치시키셔는 안 된다.

ISP와의 관계

CRP는 ISP의 포괄적인 버전

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

컴포넌트 응집도에 대한 균형 다이어그램

응집도에 관한 세 원칙이 서로 상충됨

REP와 CCP는 포함 원칙 -> 컴포넌트를 크게 만듬

CRP는 배제 원칙 -> 컴포넌트를 작게 만듬

REP와 CRP에만 중점을 두면, 사소한 변경이 생겼을 때 너무 많은 컴포넌트에 영향을 미친다.

CCP와 REP에만 과도하게 집중하면 불필요한 릴리스가 너무 빈번해진다.

뛰어난 아키텍트라면 이 균형 삼각형에서 개발팀이 현재 관심을 기울이는 부분을 충족하는 위치를 찾아야 함

참조

  1. 클린 아키텍처(Clean Architecture)
This post is licensed under CC BY 4.0 by the author.