본문 바로가기

LANGUAGES, METHODLOGY/Clean Architecture

[클린아키텍처] 4부 : 컴포넌트 원칙

클린 아키텍처에서 실제 아키텍처 장에 들어가기 전에 컴포넌트에 있어 지켜야 할 원칙들에 대해 보이고 있는 장이다.

 

중요한 개념을 가지고 있으면서, 여러 이 개념을 이해하고 응용하는데 필요한 용어들이 다수 있기에

 

이를 정리해보고 리마인드 하고 싶은 내용을 마저 정리해보고자 한다!

 

  • REP : 재사용/ 릴리스 등가 원칙
    • 재사용 단위는 릴리스 단위와 같다. 개발자는 릴리즈 단위를 통해 어느 시점의 컴포넌트를 사용해야 하는지 알 수 있다. 요즘엔 너무도 일반적인 사용 예!
  • CCP : 공통 폐쇄 원칙
    • 동일한 이유로 동일한 시점에 변경되는 클래스를 같은 컴포넌트로 묶어라. 서로 다른 시점에 다른 이유로 변경되는 클래스는 다른 컴포넌트로 분리하라. SRP와 OCP 원칙을 가지고 이 원칙을 적용해낼 수 있다.
  • CRP : 공통 재사용 원칙
    • 컴포넌트 사용자들을 필요하지 않는 것에 의존하게 강요하지 말라. 강하게 결합되지 않은 클래스들을 동일한 컴포넌트에 위치시키지 않도록 하는 것이 핵심.

먼저 나온 이 세가지의 원칙은 서로 상충하기도, 상호작용하기도 하는데, 특정 컴포넌트가 어느 원칙을 고수하면서, 특정 원칙을 가지고 가거나 포기할 때에 얻는 단점들이 존재한다. 따라서 컴포넌트의 특징과 용도 등에 따라서 컴포넌트가 우선적으로 참조할 원칙, 그리고 그 원칙이 따라야만 할 부가적인 원칙을 참조하면 되겠다. (책 113 page에 참조하기 아주 좋은 다이어그램이 있다.)


다음은 컴포넌트 간의 의존성 관계를 정의할 때 참조할 원칙들에 대한 내용이다.

 

  • ADP : 의존성 비순환 원칙
    • 컴포넌트 의존성 그래프에 순환이 있어서는 안된다. 컴포넌트의 각 의존 관계를 그래프로 그리고, 한 컴포넌트가 의존하는 컴포넌트를 따라가다 보면 다시 맨 처음의 컴포넌트를 의존하는 것으로 돌아와 순환 관계를 만드는 경우가 생길 수 있다. 이를 배제하는 것이 원칙.
  • DAG : 비순환 방향 그래프
    • ADP를 충족하는 방향 그래프를 의미한다고 보면 되겠다. 잘 알려진 DI 라이브러리인 Dagger의 어원으로 알고 있음!
  • SDP : 안정된 의존성 원칙
    • 안정성의 방향으로(더 안정된 쪽에) 의존하라. 여기서 컴포넌트의 안정됨이란 '변경되지 말아야 할 이유를 가지고 있다는 것' 으로써 이해하는 것이 중요한 포인트가 되겠다.
  • 안정성 지표
    • 안정성 지표에는 Fan-in(안으로 들어오는 의존성), Fan-out(바깥으로 나가는 의존성)이 있고, 전체 Fan-in과 Fan-out 대비 Fan-out의 비율이 0에 가까울수록 안정적이며, 1에 가까울수록 불안정한 컴포넌트로 판단할 수 있다.
  • SAP: 안정된 추상화 원칙
    • 컴포넌트는 안정된 정도만큼만 추상화되어야 한다. 이 문장은 안정성과 추상화의 관계를 잘 이해해야 머리에 잘 들어오게 될 텐데, 이는 주계열과 배제구역을 통해 좀 더 이해해볼 수 있다. 여기서 더 나아가 안정성이 곧 추상화를 의미하며, 의존성은 추상화의 방향으로 향하게 된다는 정리도 있음.
  • 주계열
    • 주계열은 안정성(I)와 추상화 정도(A)를 x,y 그래프와 같이 2차원 그래프로 나타내었을 때, A와 I가 각 반대되는 비율을 가지는 영역을 말한다(용어를 까먹었다 ㅜㅜ).
    • 해당 IA 그래프는 안정성과 추상화 정도가 각 0과 1의 최솟값, 최댓값을 가져가게 된다.
  • 배제 구역
    • 배제 구역은 두 부분으로 정의되어 있는데, 고통의 구역과 쓸모없는 구역이다.
    • 고통의 구역은 I와 A가 전부 0에 가까운 영역으로써, 구체적이면서 안정적이지 않으므로 변경하기에는 외부로 갖는 의존성 관계가 많아 변경 자체도 어렵게 되는 말대로 고통스러운 컴포넌트로 보면 되겠다.
    • 쓸모없는 구역은 I와 A가 전부 1에 가까운 영역으로 추상적이지만 외부에서 참조하는 컴포넌트가 없는 상태로, 말대로 쓸모가 없는 컴포넌트가 들어갈 수 있는 구역이라 생각하면 되겠다.
    • 마지막으로 짚을 점은 보통의 보다 알맞게 이용되는 컴포넌트들이 분포하게 되는 주계열 구역에서 고통의 구역이나 쓸모없는 구역에 가까워 질 수 있는데, D = |A + I - 1|  값을 구해 이를 릴리즈 이력에 따라 확인함으로써 특정 컴포넌트가 얼마만큼 잘 관리되고 원칙에 알맞게 만들어지고 있는지를 볼 수 있다. 여기서 D 값이 0에 가까울수록 주계열에 근접한 컴포넌트로써, 보다 잘 관리되었고 컴포넌트의 원칙을 잘 지킨 컴포넌트로써 생각할 수 있겠다. 반대로 D 값이 0보다 크면 클수록 전체 아키텍처에서 말썽을 일으킬 컴포넌트가 될 여지가 높으므로, 이를 통해 컴포넌트가 잘못 관리되고 있는 시점을 알고 이를 잘 보완할 수 있는 계기를 마련할 수 도 있겠다..!
 

클린 아키텍처

“살아있는 전설이 들려주는 실용적인 소프트웨어 아키텍처 원칙”소프트웨어 아키텍처의 보편 원칙을 적용하면 소프트웨어 수명 전반에서 개발자 생산성을 획기적으로 끌어올릴 수 있다. 《

book.naver.com