객체를 탐색하는 방법
객체를 참조한다.
- 강한 결합도
- 해당 방식은 Order에 있는 Shop을 통해 Shop을 바로 탐색할 수 있다.
Repository를 사용한다.
- 약한 결합도
- 해당 방식은 ShopRepository의 findById()를 통해 Shop을 탐색할 수 있다.
패키지 사이의 의존성 사이클을 제거하는 방법
새로운 객체로 변환한다.
- 기존에는 Shop <-> Order 양방향 참조를 하고 있다.
- 이를 중간 객체(e.g. OptionGroup, Option)를 이용해서 의존성 사이클을 끊는다.
- 이후에는 Shop <- Order 단방향 참조를 하게 된다.
의존성을 역전한다. (DIP)
- 기존에는 Order <-> Delivery 양방향 참조를 하고 있다.
- 이를 인터페이스와 구현체로 분리해서 의존성 사이클을 없앤다.
- 이후에는 Order <- Delivery 단방향 참조를 하게 된다.
새로운 패키지를 추가한다.
- 기존에는 Shop <-> Order 양방향 참조를 하고 있다.
- 이는 Shop 패키지에 ShopEventHandler 클래스가 위치하고 있어 발생한다.
- 이를 다른 패키지(e.g. Billing)로 이동하여 의존성 사이클을 해결한다.
- 이후에는 Shop <- Order 단방향 참조, Order <- Billing 단방향 참조를 하게 된다.