[Clean Architecture] 13장 :: 컴포넌트 응집도

Jihyoung·2022년 4월 7일
0

Clean Architecture

목록 보기
13/23
post-thumbnail
post-custom-banner

📕 REP: 재사용/릴리스 등가 원칙

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

  • 단일 컴포넌트는 응집성 높은 클래스와 모듈들로 구성되어야 한다.
  • 하나의 컴포넌트로 묶인 클래스와 모듈은 함께 릴리스 가능해야 한다.

📗 CCP: 공통 폐쇄 원칙

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

  • SRP에서 단일 클래스(class)는 변경의 이유가 여러 개 있어서는 안 된다고 말하듯, 공통 폐쇄 원칙(CCP)에서도 마찬가지로 단일 컴포넌트(component)는 변경의 이유가 여러 개 있어서는 안된다고 말한다.
  • 대다수의 애플리케이션에서 유지보수성(maintainability)은 재사용성보다 훨씬 중요하다.
  • CCP 에서는 변경될 가능성이 있는 클래스는 모두 한곳으로 묶을 것을 권한다.

📍 SRP와의 유사성

CCP는 컴포넌트 수준의 SRP다.

SRP → 서로 다른 이유로 변경되는 메서드를 서로 다른 클래스로 분리하라
CCP → 서로 다른 이유로 변경되는 클래스를 서로 다른 컴포넌트로 분리하라

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


📙 CRP: 공통 재사용 원칙

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

  • CRP에서는 같이 재사용되는 경향이 있는 클래스와 모듈들은 같은 컴포넌트에 포함해야 한다고 말한다.
  • 재사용 가능한 클래스는 재사용 모듈의 일부로써 해당 모듈의 다른 클래스와 상호작용하는 경우가 많다.
    • CRP에서는 이런 클래스들이 동일한 컴포넌트에 포함되어야 한다고 말한다.
  • 의존하는 컴포넌트가 있다면 해당 컴포넌트의 모든 클래스에 대해 의존함을 확실히 인지해야 한다.
  • CRP는 어떤 클래스를 한곳에 묶어도 되는지보다는, 어떤 클래스를 한곳에 묶어서는 안 되는지에 대해서 훨씬 더 많은 것을 이야기한다.

📍 ISP와의 관계

  • ISP → 사용하지 않는 메서드가 있는 클래스에 의존하지 말라
  • CRP → 사용하지 않는 클래스를 가진 컴포넌트에 의존하지 말라

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


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

응집도에 관한 세 원칙은 서로 상충된다.

  • REP와 CCP는 포함(inclusive) 원칙 : 컴포넌트를 더욱 크게 만듦
  • CRP는 배제(exclusive) 원칙 : 컴포넌트를 더욱 작게 만듦

  • REP와 CRP에만 중점을 두면, 사소한 변경에 너무 많은 컴포넌트에 영향을 미친다.
  • CCP와 REP에만 과도하게 집중하면 불필요한 릴리스가 너무 빈번해진다.
  • CRP와 CCP에만 집중하게 되면 재사용성이 떨어지게 된다.

프로젝트의 컴포넌트 구조는 시간과 성숙도에 따라 변하기 때문에 프로젝트가 실제로 수행하는 일 자체보다는 프로젝트가 발전되고 사용되는 법과 더 관련이 깊다.


📒 결론

어느 클래스들을 묶어서 컴포넌트로 만들지를 결정할 때, 재사용성과 개발 가능성을 고려해야 한다.

이들 사이에서 애플리케이션의 요구에 맞게 균형을 잡는 일은 중요하며 이 균형점은 항상 유동적이다.


📚 Reference

  • Clean Architecture : 소프트웨어 구조와 설계의 원칙
profile
로그를 생활화
post-custom-banner

0개의 댓글