Posts [우아한테크코스] 우아한객체지향 - Part 3
Post
Cancel

[우아한테크코스] 우아한객체지향 - Part 3

객체를 탐색하는 방법

객체를 참조한다.

  • 강한 결합도
  • 해당 방식은 Order에 있는 Shop을 통해 Shop을 바로 탐색할 수 있다.

high-coupling

Repository를 사용한다.

  • 약한 결합도
  • 해당 방식은 ShopRepository의 findById()를 통해 Shop을 탐색할 수 있다.

low-coupling


패키지 사이의 의존성 사이클을 제거하는 방법

새로운 객체로 변환한다.

  • 기존에는 Shop <-> Order 양방향 참조를 하고 있다.
  • 이를 중간 객체(e.g. OptionGroup, Option)를 이용해서 의존성 사이클을 끊는다.
  • 이후에는 Shop <- Order 단방향 참조를 하게 된다.

package-with-cycle-1 package-without-cycle-1

의존성을 역전한다. (DIP)

  • 기존에는 Order <-> Delivery 양방향 참조를 하고 있다.
  • 이를 인터페이스와 구현체로 분리해서 의존성 사이클을 없앤다.
  • 이후에는 Order <- Delivery 단방향 참조를 하게 된다.

package-with-cycle-2 package-without-cycle-2

새로운 패키지를 추가한다.

  • 기존에는 Shop <-> Order 양방향 참조를 하고 있다.
  • 이는 Shop 패키지에 ShopEventHandler 클래스가 위치하고 있어 발생한다.
  • 이를 다른 패키지(e.g. Billing)로 이동하여 의존성 사이클을 해결한다.
  • 이후에는 Shop <- Order 단방향 참조, Order <- Billing 단방향 참조를 하게 된다.

package-with-cycle-3 package-without-cycle-3


Reference

This post is licensed under CC BY 4.0 by the author.

[우아한테크코스] 우아한객체지향 - Part 1

[Effective Java] 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라