TIL 23.02.14

쓰옹·2023년 2월 14일
0

개발자를 향해~~TIL✍

목록 보기
86/87

어제 몸살기운이 있었는데 아직 머리가 아픔. 그래서 뭔가 정신없이 한듯.
모임조회할 때 참여자목록 조회 하는 거랑 후기 조회하는 기능을 분리함. 모임참여신청기능, 모임후기기능 함
레파지토리에서 manyToOne맺었을 때 n쪽 레파지토리에서 1을 사용해서 조회할 때 id가 아니라 엔티티 자체를 사용해아함
findAllByGroupId가 아니라 findAllByGroup을 해야함.

그룹에 관한 기능에서 리더인지 확인할 떄

if (group.getUser().getUsername().equals(username)) {
...
}

이런 식으로 객체 내부를 까서 하는 방식으로 했는데 이렇게 하면 디미터의 법칙에 위배되는 방법이다.

어떤 객체가 다른 객체에 대해 지나치게 많이 알다보니, 결합도가 높아지고 좋지 못한 설계를 야기한다는 것을 발견하였다. 그래서 이를 개선하고자 객체에게 자료를 숨기는 대신 함수를 공개하도록 하였는데, 이것이 바로 디미터의 법칙이다.

즉, 디미터의 법칙은 다른 객체가 어떠한 자료를 갖고 있는지 속사정을 몰라야 한다는 것을 의미하며, 이러한 이유로 Don’t Talk to Strangers(낯선 이에게 말하지 마라) 또는 Principle of least knowledge(최소 지식 원칙) 으로도 알려져 있다.

또는 직관적으로 이해하기 위해 여러 개의 .(도트)을 사용하지 말라는 법칙으로도 많이 알려져 있으며, 디미터의 법칙을 준수함으로써 캡슐화를 높혀 객체의 자율성과 응집도를 높일 수 있다.
출처: [OOP] 디미터의 법칙(Law of Demeter)

아래처럼 수정함

if (group.isLeader(username)) {
...
}

// Group.java
...
public String getUsername() {
	return this.user.getUsername();
}


public boolean isLeader(String username) {
	return this.getUsername().equals(username);
}

객체 내부에 메서드를 만들어서 사용한다.

profile
기록하자기록해!

0개의 댓글