Clean Architecture 4부: 컴포넌트 원칙

jiffydev·2021년 4월 29일
0

Clean Architecture

목록 보기
3/5

로버트 C. 마틴의 클린 아키텍처를 읽고 내용 요약 및 생각 정리용 포스트

요약

  • 컴포넌트 응집도

    1. 재사용/릴리스 등가 원칙(REP):
    컴포넌트는 재사용 가능한 클래스들로 구성되어야 한다.
    컴포넌트를 구성하는 클래스들은 서로 공유하는 목적이 있어야 한다.

    2. 공통 폐쇄 원칙(CCP)
    동일한 이유로 동일한 시점에 변경되는 클래스는 같은 컴포넌트로 묶고, 그렇지 않다면 다른 컴포넌트로 분리한다.
    유지보수성(maintainability)과 관계가 있다. 변경을 단일 컴포넌트로 제한하게 되므로 검증, 배포 작업을 최소화할 수 있다.
    컴포넌트 수준의 SRP라고 할 수 있다.

    3. 공통 재사용 원칙(CRP)
    재사용되는 클래스들은 보통 재사용 모듈의 일부로써 다른 클래스에도 의존하는 경우가 많다.
    의존하는 컴포넌트의 단 하나의 클래스에 의존하더라도, 모든 클래스에 의존하는 것과 같다.
    의존하게 되면 재배포 가능성이 높아지므로 강하게 결합되지 않은(서로 의존하지 않는) 클래스들을 묶어서는 안 된다.

    세 원칙은 상충하는 관계이므로, 모든 원칙을 만족시킬 수는 없다. 대신 프로젝트의 단계에 따라 유동적으로 변하고 이에 따라 균형잡힌 컴포넌트를 구축할 수 있도록 해야 한다.

  • 컴포넌트 결합

    1. 의존성 비순환 원칙(ADP):
    컴포넌트간의 의존성을 그래프로 그렸을 때, 의존성이 순환해서는 안 된다.
    순환 의존성이 발생하면, 수정/변경이 어렵고 단위 테스트를 하는 것도 힘들게 된다.
    순환 의존성을 끊기 위한 방법으로는 DIP를 적용할 수 있는데, 컴포넌트 내부에서 인터페이스를 생성할 수도 있고 아예 새로운 컴포넌트를 만들어서 그 컴포넌트에 의존시킬 수도 있다.
    결국 컴포넌트 의존성 구조는 프로젝트의 진행 상황에 따라 끊임없이 변화하는 구조이고, 아키텍트는 이에 항상 대비하고 있어야 한다.

    2. 안정된 의존성 원칙(SDP)
    컴포넌트에 의존할 때는 더 안정적인 쪽에 의존해야 한다.
    안정성이란 의존성이 높은 것, 즉 다른 컴포넌트들이 많이 의존하기 때문에 변경이 어려운 컴포넌트를 뜻한다. (반대로 내가 의존하는 컴포넌트가 많다면 변동성이 높은 것)
    모든 컴포넌트가 안정적이어야 하는 것은 아니기 때문에 필연적으로 불안정한 컴포넌트도 존재한다. 그렇기 때문에 SDP를 위반하게 되는 경우도 존재한다.
    안정적인 컴포넌트가 불안정한 컴포넌트를 의존하게 되면 SDP를 위반하게 되는데, 이는 DIP를 통해 안정적인 컴포넌트의 메소드를 가진 인터페이스를 생성하여 인터페이스에 의존하도록 강제함으로써 해결할 수 있다.

    3. 안정된 추상화 원칙(SAP)
    고수준의 정책은 안정적이어야 하지만 한편으로 수정할 수도 있어야 한다.
    이처럼 안정성과 유연성을 동시에 갖출 수 있도록 하는 것이 추상 클래스이다.
    안정성과 추상성의 관계는 다음과 같은 그래프로 나타낼 수 있다.

    컴포넌트는 그래프의 주계열 근처에 위치해야 하며, 그 외의 지역에 위치할 경우 개선이 필요하다.

으악 포인트

질문

  • 프로젝트 초기 단계에서는 CCP가 REP보다 중요하다고 하는 근거로, 개발 가능성이 재사용성보다 중요하기 때문이라고 하는데, CCP는 유지보수성과 관계가 있다. 유지보수성은 개발 가능성과 유사한 뜻인가? 전혀 다른 뜻 같다.

소감

  • 컴포넌트의 안정성이나 추상성과의 관계를 구체적으로 수치화할 수 있다는 점이 놀라웠고, 이렇게 수치화한다면 컴포넌트를 개선함에 있어서도 더욱 효율적으로 빠르게 개선할 수 있을 것 같다.

추가 사항

profile
잘 & 열심히 살고싶은 개발자

0개의 댓글