<aside> 💡 이번 장에서는 코드를 구성하는 몇 가지 방법을 살펴보고, 육각형 아키텍처를 직접적으로 반영하는 표현력 있는 패키지 구조를 알아보자!
</aside>
새 프로젝트에서 가장 먼저 제대로 만들려고 하는 것은 패키지 구조다.
→ 사용자가 본인의 계좌에서 다른 계좌로 돈을 송금할 수 있는 ‘송금하기’ 유스케이스를 살펴보자!
코드를 구조화하는 첫 번째 접근법은 계층을 이용하는 것으로, 다음과 같이 코드를 구성할 수 있다.
buckpal
domain
Account
Activity
AccountRepository
AccountService
persistence
AccountRepositoryImpl
web
AccountController
domain
패키지에 있는 도메인 코드만을 향하도록 해뒀다.domain
패키지에 AccountRepository
인터페이스를 추가하고, persistence
패키지에 AccountRepositoryImpl
구현체를 둠으로써, 의존성을 역전시켰다.그러나, 적어도 세 가지 이유로 이 패키지 구조는 최적의 구조가 아니다!
애플리케이션의 기능 조각이나 특성을 구분 짓는 패키지 경계가 없다.
web
패키지에 UserController
를 추가하고, domain
에 UserService
, User
을 추가하고, persistence
에 UserRepositoryImpl
을 추가해야 한다.애플리케이션이 어떤 유스케이스들을 제공하는지 파악할 수 없다.