[프로젝트 일기 4/28] 약속 조회 API - 디미터의 법칙

Updated:

약속 전체 조회 로직을 구현하던 중 디미터의 법칙에 대해 고민해 보게 되었습니다.

약속 전체 조회 API에서 반환해 줘야할 데이터는 다음과 같습니다.

  • 약속 Id
  • 약속 이름
  • 약속 시간
  • 약속 장소

Promise.java

스크린샷 2022-04-25 오후 4.38.13.png

Place.java

스크린샷 2022-04-25 오후 4.38.50.png

이때 약속 아이디, 이름, 시간은 Promise 객체에서 바로 가져올 수 있지만 약속 장소같은 경우에는 Promise 객체의 Place 객체에 접근하여 정보를 얻어오게 됩니다.

스크린샷 2022-04-25 오후 3.39.07.png

p.getPlace().getLocation() // ):

이와 같이 getter가 줄줄이 이어지는 코드가 만들어지고, 멀리 떨어져 있는 낯선 객체에 메시지를 보내는 것을 피하라는 디미터의 법칙 $($Don’t talk to stranger)를 위반하는 설계가 되버리고 맙니다.

디미터의 법칙을 위반하게 되면 OOP의 이점중 하나인 캡슐화를 위반하게 됩니다. 위의 코드의 경우 Promise 객체가 Place객체에 Location이라는 정보가 있음을 알고있어야 가능한 코드이기 때문입니다.

따라서 Place 객체의 데이터를 통해서 약속 장소를 파악하는 것이 아니라 Place의 객체에 메세지를 보내서 약속 장소 정보를 파악하도록 구현해야 합니다.

Promise.java

스크린샷 2022-04-25 오후 4.57.34.png

Promise 객체에 다음과 같이 Place 객체에 보내는 메세지를 구현해 주었습니다.

그리고 약속 조회 로직을 다음과 같이 디미터의 법칙을 준수한채 구현할 수 있었습니다.

스크린샷 2022-04-25 오후 4.59.55.png

참고 자료 📚

  • https://mangkyu.tistory.com/147

Categories:

Updated:

Leave a comment