ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 13장 - 컴포넌트 응집도
    클린 코드(Clean Code)/클린 아키텍처요약 2022. 12. 14. 00:01
    728x90

    어떤 클래스를 어떤 컴포넌트에 포함시켜야 할까요?

     

    이 장에서는 컴포넌트 응집도와 관련된 세 가지 원칙을 논합니다

     

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

    CCP: 공통 폐쇄 원칙

    CRP: 공통 재사용 원칙

     

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

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

     

    지난 십 년은 메이븐, 라이닝언, RVM 같은 모듈 관리 도구가 많이 생겼습니다.

    이 기간에는 재사용 가능한 컴포넌트가 컴포넌트 라이브러리가 엄청나게 많이 만들어졌기 때문입니다.

     

    소프트웨어 컴포넌트가 릴리즈 절차를 통해 추적 관리되지 않거나 릴리스 번호가 부요되지 않는다면 해당 컴포넌트를 재사용하고 싶어도 할 수도 없고, 하지도 않을 것입니다.

     

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

    또한 새로운 버전이 언제 출시되고 무엇이 변했는지를 소프트웨어 개발자들이 알아야 하기 때문입니다.

     

    적절한 공지와 함께 릴리스 문서 작성도 동반되어야 개발자가 충분한 정보를 바탕으로 새 릴리스를 통합할지 말지를 결정할 수 있습니다.

     

    이 원칙을 소프트웨어 설계와 아키텍처 관점에서 보면 단일 컴포넌트는 응집성 높은 클래스와 모듈들로 구성되어야 함을 뜻합니다.

     

    하나의 컴포넌트로 묶인 클래스와 모듈은 반드시 함께 릴리스 할 수 있어야 하며 동일한 릴리스로 추적 관리되어야 합니다.

     

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

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

     

    SOLID의 단일책임원칙의 엑터와 동일합니다

     

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

     

    또한 OCP와도 밀접하게 관계되어 있습니다.

     

    즉, 공통 폐쇄 원칙은 SRP + OCP라고 할 수 있습니다.

     

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

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

     

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

     

    대체로 재사용 가능한 클래스는 재사용 모듈의 일부로써 해당 재사용 모듈의 다른 클래스와 상호작용하는 경우가 많습니다.

    이러한 컴포넌트 내부에서는 클래스 사이에 수많은 의존성이 있을 수 있습니다.

     

    이들은 강하게 서로 결합되어 있으며 함께 재사용됩니다.

    따라서 이들 클래스는 반드시 동일한 컴포넌트에 위치해야 합니다.

     

    어떤 컴포넌트가 다른 컴포넌트를 사용하면 두 컴포넌트 사이에는 의존성이 생깁니다.

    어쩌면 사용하는 컴포넌트가 사용되는 컴포넌트에서 단 하나의 클래스만 사용할 수도 있습니다.

    그럼에도 의존성은 조금도 약해지지 않습니다.

     

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

     

    즉, CRP는 강하게 결합되지 않은 클래스들을 동일한 컴포넌트에 위치시켜서는 안 된다고 말합니다.

     

    ISP와 비슷한 느낌입니다. (사용하지 않는 메서드가 있는 클래스에 의존하지 말라)

     

    결합도 응집도에 대한 균형 다이어그램

    REP와 CCP는 포함원칙입니다.

    두 원칙은 컴포넌트를 더욱 크게 만듭니다.

     

    CRP는 배제 원칙이며 컴포넌트를 더 작게 만듭니다.

     

    뛰어난 아키텍트라면 이 원칙들이 균형을 이루는 방법을 찾아야 합니다.

     

    프로젝트 초기에는 개발 가능성이 재사용성보다 더욱 중요해서 CCP가 REP보다 훨씬 더 중요합니다.

     

    하지만 프로젝트가 성숙해지면 재사용성이 더 중요해지게 됩니다.

     

    결론

    과거에는 결합도에 대한 우리의 인식은 훨씬 간단했습니다.

     

    응집도를 '모듈은 단 하나의 기능만 수행해야 한다'는 속성 정도로 단순하게 이해하기도 했습니다.

     

    하지만 위의 세 가지 원칙은 응집도가 가질 수 있는 다양성을 설명합니다.

     

    어느 클래스들을 묶어서 컴포넌트로 만들지 결정할 때, 재사용성과 개발 가능성이라는 상충하는 힘을 반드시 고려해야 합니다.

     

     

    댓글

Designed by Tistory.