Skip to content

Latest commit

 

History

History
22 lines (17 loc) · 2.28 KB

clean-architecture-chapter-03.md

File metadata and controls

22 lines (17 loc) · 2.28 KB

chapter 03 코드 구성하기

계층으로 구성하기

  • 적어도 세 가지 이유로 이 패키지 구조는 최적의 구조가 아니다.
    • 첫 번째로, 애플리케이션의 기능 조각(functional slice)이나 특정(feature)을 구분 짓는 패키지 경계가 없다.
      • 추가적인 구조가 없다면, 아주 빠르게 서로 연관되지 않은 기능들끼리 예상하지 못한 부수효과를 일으킬 수 있는 클래스들의 엉만진창 묶으로 변모할 가능성이 크다.
    • 두 번째로, 애플리케이션이 어떤 유스케이스들을 제공하는지 파악할 수 없다.
      • 특정 기능을 찾기 위해서는 어떤 서비스가 이를 구현했는지 추측해야 하고, 해당 서비스 내의 어떤 메서드가 그에 대한 책임을 수행하는지 찾아야 한다.
    • 비슷하게, 패키지 구조를 통해서는 우리가 목표로 하는 아키텍처를 파악할 수 없다.

기능으로 구성하기

  • 그러나 기능에 의한 패키징 방식은 사실 계층에 의한 패키징 방식보다 아키텍처의 가시성을 훨씬 더 떨어뜨린다. 어댑터를 나타내는 패키지명이 없고, 인커밍 포트, 아웃고잉 포트를 확인 할 수 없다.

아키텍처적으로 표현력 있는 패키지 구조

  • 육각형 아키텍처에서 구조적으로 핵심적인 요스는 엔티티, 유스케이스, 인커밍/아웃고잉 포트, 인커밍/아웃고잉(혹은 주도하거나 주도되는) 어댑터다.
  • 이처럼 표현력 있는 패키지 구조는 아키텍처에 대한 적극적인 사고를 촉진한다. 많은 패키지가 새익고, 현재 작업 중인 코드를 어떤 패키지에 넣어야 할지 계속 생각해야 하기 때문이다.

의존성 주입의 역할

  • 모든 계층에 의존성을 가진 중립적인 컴포넌트를 하나 도입하는 것이다. 이 컴포넌트는 아키텍처를 구성하는 대부분의 클래스를 초기화하는 역할을 한다.

유지보수 가능한 소프트웨어를 만드는 데 어떻게 도움이 될까?

  • 코드에서 아키텍처의 특정 요소를 찾으려면 이제 아키텍처 다이어그램의 박스 이름을 따라 패키지 구조를 탐색하면 된다. 이로써 의사소통, 개발, 유지보수 모두가 조금 더 수월해진다.