[Book]Clean Architecture 4부

  • 컴포넌트 원칙
    • 컴포넌트가 마지막에 어떤 형태로 배포되든, 잘 설계된 컴포넌트라면 반드시 독립적으로 배포 가능한, 독립적으로 개발 가능한 능력을 갖춰야 한다.

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

  • 재사용 단위는 릴리스 단위와 같다.
  • 하나의 컴포넌트로 묶인 클래스와 모듈은 반드시 함께 릴리스 할 수 있어야 한다.

CCP : 공통 폐쇄 원칙

  • SRP에서 단일 클래스는 변겨으이 이유가 여러 개 있어서는 안된다고 말하듯이, CCP에서도 마찬가지로 단일 컴포넌트는 변경의 이유가 여러 개 있어서는 안된다고 말한다.

CRP : 공통 재사용 원칙

  • 컴포넌트 사용자들을 필요하지 않는 것에 의존하게 강요하지 말라.
  • 같이 재사용되는 경향이 있는 클래스와 모듈들을 같은 컴포넌트에 포함해야 한다.
  • 강하게 결합되지 않은 클래스들을 동일한 컴포넌트에 위치시켜서는 안 된다.
  • CRP는 ISP의 포괄적인 원칙이다.
    • ISP는 사용하지 않은 메서드가 있는 클래스에 의존하지 말라고 한다.
    • CRP는 사용하지 않은 클래스를 가진 컴포넌트에 의존하지 말라고 한다.

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

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

component_diagram

ADP : 의존성 비순환 원칙

  • 컴포넌트 의존성 그래프에 순환(cycle)이 있어서는 안 된다.
  • ‘숙취 증후군’에 의해 대한 해결책

주 단위 빌드

  • 월-목은 개발하고 금요일에 통합한다.
  • 규모가 커질수록 통합에 드는 시간이 늘어나면서, 팀의 효율성도 나빠진다.

순환 의존성 제거하기

  1. 개발 환경을 릴리스 가능한 컴포넌트 단위로 분리한다.
  2. 컴포넌트는 개별 개발자 또는 단일 개발팀이 책임질 수 있는 작업 단위가 된다.
  3. 개발자가 해당 컴포넌트가 동작하도록 만든 후 해당 컴포넌트를 릴리스 하여 다른 개발자가 사용할 수 있도록 만든다.
  4. 담당 개발자는 컴포넌트에 릴리스 번호를 부여하고, 다른 팀에서 사용할 수 있는 디렉토리로 이동시킨다.
  5. 개발자는 자신만의 공간에서 해당 컴포넌트를 지속적으로 수정한다.
  6. 나머지 개발자는 릴리스된 버전을 사용한다.
  7. 컴포넌트가 새로 릴리스 된다면, 다른 팀에서는 새 릴리스를 당장 적용할지를 결정한다.
    • 어떤 팀도 다른 팀에 의해 좌우되지 않는다.

SDP : 안정된 의존성 원칙

  • 더 안정된 쪽에 의존하라
  • 안정성 지표
    • 불안정성 = 바깥으로 나가는 의존성 / (안으로 들어오는 의존성 + 바깥으로 나가는 의존성)

SAP : 안정된 추상화 원칙

  • 컴포넌트는 안정된 정도만큼만 추상화되어야 한다.
  • 시스템에는 자주 변경해서는 절대로 안되는 SW도 있다. 고수준 아키텍처나 정책 결정과 관련된 SW다.
  • 시스템에서 고수준 정책을 캡슐화하는 SW는 반드시 변동성이 큰 SW, 즉 쉽고 빠르게 변경할 수 있는 SW만을 포함해야 한다.
  • 컴포넌트가 최고로 안정된 상태이면서도 변경에 충분히 대응할 수 있을 정도로 유연하게 만들 수 있는 방법, 추상 클래스이다.

카테고리:

업데이트:

댓글남기기