clean-architecture

14. 컴포넌트 결합

지금부터 다룰 세 가지 원칙은 컴포넌트 사이의 관계를 설명한다.

ADP : 의존성 비순환 원칙

컴포넌트 의존성 그래프에 순환이 있어서는 안 된다.

주 단위 빌드

개발보다 통합에 드는 시간이 늘어나게 된다면 팀의 효율성도 서서히 나빠진다.

순환 의존성 제거하기


개발 환경을 릴리즈 가능한 컴포넌트 단위로 분리하는 것이다.

컴포넌트는 개별 개발자 또는 단일 개발팀이 책임질 수 있는 작업 단위가 된다.

개발자가 해당 컴포넌트가 동작하도록 만든 후, 해당 컴포넌트를 릴리즈하여 다른 개발자가 사용할 수 있도록 만든다.

순환 끊기


흐트러짐


하향식 설계


SDP : 안정된 의존성 원칙


안정성의 방향으로 의존하라. 설계를 유지하다 보면 변경은 불가피하다.

공통 폐쇄 원칙을 준수함으로써, 컴포넌트가 다른 유형의 변경에는 영향받지 않으면서도 특정 유형의 변경에만 민감하게 만들 수 있다.

안정성

안정성 지표

Fan-in : 안으로 들어오는 의존성. 컴포넌트 내부의 클래스에 의존하는 컴포넌트 외부의 클래스 개수를 나타낸다.

Fan-out : 바깥으로 나가는 의존성. 이 지표는 컴포넌트 외부의 클래스에 의존하는 컴포넌트 내부의 클래스 개수를 나타낸다.

추상 컴포넌트

오로지 인터페이스만을 포함하는 컴포넌트를 생성하는 방식이 이상하게 보일 수도 있다. 이러한 컴포넌트에는 실행 가능한 코드가 전혀 없는데? 하지만 자바나 C#같은 정적 타입 언어를 사용할 때 이 방식은 상당히 흔할 뿐만 아니라, 꼭 필요한 전략으로 알려져 있다.

SAP : 안정된 추상화 원칙


컴포넌트는 안정된 정도만큼만 추상화되어야 한다.

안정된 추상화 원칙

결론


이 장에서 설명한 의존성 관리 지표는 설계의 의존성과 추상화 정도가 내가 훌륭한 패턴이라고 생각하는 수준에 얼마나 잘 부합하는지를 축정한다.

경험을 통해 좋은 의존성도 있지만 좋지 않은 의존성도 있다는 사실을 배웠다고 한다.

이 패턴은 이러한 경험을 반영한다. 하지만 지표는 신이 아니다. 지표는 아무리 해도 불완전하지만, 무언가 유용한 것을 찾을 수 있기를 바란다.