• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

연관관계 편의 메서드는 주인 vs 주인아닌곳 중 어디서 사용하는게 낫나요?

24.04.22 23:44 작성 조회수 86

1

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
강의에서 order 객체(주인X)쪽에서 addOrderItem 메서드로 orderItems.add(orderItem), orderItem.setOrder(order) 를 하시는걸 보았습니다.

 

어느쪽(주인 or 주인X)에서 편의 메서드를 사용할지는 상황에 따라 다른가요?

 

예전 강의의 team(주인X), member(주인) 관계에서,

member.setTeam 메서드 내에서 this.team = team, team.getMembers().add(this) 를 했던게 기억나는데, 이 경우는 주인쪽에서 반대쪽에 값을 넣어주었잖아요

 

[질문 정리]

  1. 양방향 연관관계에서 주인과 주인이 아닌쪽 모두에게 값을 입력할때 사용하는 연관관계 편의 메서드의 위치는 어디든 상관없나요?

  2. 편의 메서드를 양쪽 모두에 정의해도 되나요? 좀 복잡할 것 같긴한데..

답변 2

·

답변을 작성해보세요.

1

OMG님의 프로필

OMG

2024.04.23

안녕하세요. 김동현님, 공식 서포터즈 OMG입니다.

다음 링크(여기를 클릭)의 영한님 답변을 참고해주세요 😀

편의 메서드의 위치를 주인 기준으로 정하기보다는 영한님 말씀처럼 객체지향 설계 관점에서 바라보는 기준이 되어야 할 것 같습니다 ^^

감사합니다.

김동현님의 프로필

김동현

질문자

2024.04.24

답변 감사합니다. 찾고 있었던 정보였습니다!

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.22

안녕하세요, 인프런 AI 인턴입니다.

김동현님의 질문에 대한 답변은 다음과 같습니다.

  1. 연관관계 편의 메서드의 위치에 대한 질문:
    연관관계 편의 메서드는 보통 관계를 가장 잘 표현할 수 있는 곳, 즉 비즈니스 로직상 더 중요한 엔티티 쪽에 두는 것을 추천합니다. 연관관계의 주인이 아닌 곳에 위치해도 되며, 가장 주요한 포인트는 해당 메서드를 통해 양방향 연관관계가 적절하게 설정되어 양쪽 엔티티 상태가 일관되게 유지되어야 한다는 것입니다. 김영한 강사님의 강의에서 다뤄지는 예시는 비즈니스 로직을 구현할 때 어느 쪽에 편의 메서드를 둘 것인가에 대해 깊이 고민해보고 결정하는 것을 보여줍니다.

  2. 양쪽 모두에 편의 메서드를 정의하는 방법에 대한 질문:
    일반적으로 한 쪽에만 편의 메서드를 정의하는 것이 좋습니다. 이유는 양쪽 모두에 편의 메서드를 정의해두면, 상호 참조로 인해 무한 루프가 발생할 위험이 있고, 코드의 복잡성이 증가하기 때문입니다. 따라서, 관계의 주인 측에만 편의 메서드를 두는 것이 일반적인 권장 사항입니다. 그러나 상황에 따라 다를 수 있으며, 양방향 관계를 설정할 때 무한 루프에 빠지지 않도록 주의해야 합니다.

이와 관련된 좀 더 상세한 설명이 필요하시다면, 연관관계 편의 메서드 위치에 관련한 질문에 대한 김영한 강사님의 답변을 참고하시면 도움이 될 것입니다:

이 답변은 연관관계 편의 메소드의 위치에 대한 김영한 강사님의 생각을 전달하며, 데이터를 변경할 필요가 있는 경우 부분적으로 setter를 열어두어도 괜찮다는 관점을 설명하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.