13장 컴포넌트 응집도
태그
비어 있음
날짜
2024년 5월 8일
어느 클래스를 어느 컴포넌트에 포함 시켜야 할까? 소프트웨어 엔지니어링 원칙의 도움을 받아보자 컴포넌트 응집도와 관련된 세 가지 원칙
🏁 REP: 재사용/릴리스 등가 원칙
재사용 단위는 릴리스 단위와 같다.
릴리스 절차를 통해 추적해서 관리되지 않는다면 컴포넌트를 재사용 할 수 없을 것이다.
⇒ 컴포넌트가 서로 호응되는지 보증할 방법이 없다.
새로운 버전이 언제 출시되고 무엇이 변했는지를 소프트웨어 개발자들이 알아야한다.
적절한 공지와 문서도 작성되어야 함
💡
소프트웨어 설계와 아키텍처 관점에서 보면 단일 컴포넌트는 응집성 높은 클래스와 모듈들로 구성되어야 함을 뜻한다.
다음에 나오는 원칙 CCP,CRP는 이원칙에 제약을 가하는 측면에서 정의한다.
🏁 CCP: 공통 폐쇄 원칙
동일한 시점에 동일한 이유로 동일한 시점에 변경되는 클래스를 같은 컴포넌트로 묶어라. 서로 다른 시점에 다른 이유로 변경되는 클래스는 다른 컴포넌트로 분리하라.
단일 책임 원칙을 컴포넌트 관점에서 쓴 것
컴포넌트 수준의 SRP
→ 단일 컴포넌트는 변경의 이유가 여러 개 있어서는 안 된다.
여러 컴포넌트에서 변경 < 단일 컴포넌트에서 변경
CCP는 같은 이유로 변경될 가능성이 있는 클래스는 모두 한 곳으로 묶을 것을 권한다.
이를 통해 소프트웨어 릴리즈, 재검증, 배포하는 일의 작업량을 최소화 할 수 있다.
개방 폐쇄 원칙(OCP)과도 밀접한 관련이 있다. closure
CCP에서는 동일한 유형의 변경에 대해
닫혀 있는 클래스들을 하나의 컴포넌트로 묶음으로써 OCP의 교훈을 확대 적용한다.
요구사항 발생 → 변경을 받는 컴포넌트 최소한으로 한정
🏁 CRP: 공통 재사용 원칙
컴포넌트 사용자들을 필요하지 않는 것에 의존하게 강요하지 말라.
CRP는 같이 재사용되는 클래스들을 같은 컴포넌트에 포함해야 한다고 말한다.
상호작용하는 클래스와 모듈들은 동일한 컴포넌트에 포함되어야 한다.
수많은 의존성이 있을 것이다.
⇒ CRP는 각 컴포넌트에 어떤 클래스를 포함시켜야 하는지를 설명한다.
⇒ CRP는 동일한 컴포넌트로 묶어서는 안되는 클래스를 말해준다.
컴포넌트A가 다른 컴포넌트B의 한 클래스만 의존한다고 의존성이 약해지는 것은 아니다.
이것을 인지하지 않으면 많은 컴포넌트를 재배포하게 될 수 있다.
강하게 결합이 되지 않은 클래스를 동일한 컴포넌트에 위치시키면 안됨.
“한 컴포넌트에 속한 클래스들은 더 작게 그룹지을 수 없다.” → 이해가 잘 안됨
gpt : 한 컴포넌트 내의 클래스들이 그 자체로 최소한의 의존성을 가지고 최대한 재사용 가능하게 설계되어야 한다는 의미입니다. 다시 말해, 이들 클래스는 그룹을 더 세분화할 필요 없이, 컴포넌트로서의 역할을 충분히 수행할 수 있어야 합니다.
⇒ 최소한의 의존성을 가진 것들끼리 원자성을 띄게 그룹지어야함!
CRP ⊂ ISP
사용하지 않은 메서드가 있는 클래스에 의존하지 말라고 조언
사용하지 않는 클래스를 가진 컴포넌트에 의존하지 말라고 조언
🏁 컴포넌트 응집도에 대한 균형 다이어그램
REP와 CCP는 포함 원칙, CRP는 배제 원칙
균형을 이룰 수 있게 해야 한다.
프로젝트 초기에는 CCP>REP → 개발 가능성 > 재사용성
프로젝트 진행에 따라 “왼쪽 ←오른쪽” 이동한다.
즉, 프로젝트의 컴포넌트 구조는 시간과 성숙도에 따라 변한다.
프로젝트가 발전되고 사용되는 방법과 관련이 깊다.
🏁 결론
어느 클래스들을 묶어서 컴포넌트로 만들지를 결정할 때, 재사용성과 개발가능성이라는 상충하는 힘을 반드시 고려해야 한다.
균형점은 유동적이다. 시간이 흐름에 따라 프로젝트의 초점이 개발가능성에서 재사용성으로 바뀌고 그에 따라 컴포넌트를 구성하는 방식도 조금씩 흐트러지고 또 진화한다.
링크
표
'책 > 클린 아키텍처' 카테고리의 다른 글
16장 독립성 (0) | 2025.03.18 |
---|---|
15장 아키텍처란? (0) | 2025.03.18 |
11장 DIP: 의존성 역전 원칙 (0) | 2025.03.18 |
9장 LSP: 리스코프 치환 원칙 (0) | 2025.03.18 |
7장 SRP: 단일 책임 원칙 (0) | 2025.03.18 |