인프런 커뮤니티 질문&답변

김지연님의 프로필 이미지
김지연

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

양방향 연관관계와 연관관계의 주인 2 - 주의점, 정리

mappedBy 사용 필드를 List<T> 타입으로 저장하는 이유

해결된 질문

작성

·

203

0

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

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

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

[질문 내용]
Team 객체 내에 있는 member 객체를 List<Member> 형태로 저장하는 이유가 무엇인가요?

@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();

역방향 객체에서 값을 세팅해줄 때

team.getMembers().add(member); 형태로 세팅하는데

연관 관계의 주인이 하는 것처럼 객체를 세팅할 수는 없을까요?

team.setMembers(member);

답변 2

0

안녕하세요. 김지연님, 공식 서포터즈 김지연입니다.

  1. Member가 N이기 때문에 한 팀에 속한 회원'들'을 보관할 수 있는 방법인 List를 사용한 것입니다.

  2. team.setMembers(member);를 사용하고 싶은지 알 수 있을까요?

감사합니다.

김지연님의 프로필 이미지
김지연
질문자

다대일[N:1] 관계에서 N이 객체고 1은 List 형태로 사용하는 것이 관례인가요?

객체끼리 연결하면 편하지 않을까 해서 의문점이 들었던 거였습니다

여기서 Team이 1, Member가 N입니다.

팀 1개에 여러 명의 회원이 있을 수 있는 관계입니다.

N명의 회원을 자바에서 나타내는 방법 중 하나가 List입니다. 이외에도 Set, Map, 배열 등등이 있습니다. 주로 List, Set을 사용합니다.

 

List를 사용하는 것도 객체를 사용하여 연관관계를 나타내는 것에 해당합니다.

김지연님의 프로필 이미지
김지연
질문자

정확하게 이해했습니다. 정말 감사 드립니다!

0

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

김지연님의 질문에 대해 관련 정보를 검토한 결과, 비슷한 주제에 대한 질문과 답변을 찾았습니다.

1. “mappedBy 에 대해 질문이 있습니다.”

  • 이 링크에서는 @OneToMany@ManyToOne 양방향 매핑 시 mappedBy의 역할을 설명하며, List<Member>를 사용하는 이유에 대해 간접적으로 다루고 있습니다. mappedBy는 읽기 전용 필드로, 즉 데이터베이스에 변경이나 업데이트가 발생하지 않는 필드를 말합니다. 따라서, 모델 간의 관계를 설정할 때 List를 사용하는 것은 JPA에서 관계의 방향성을 설정하기 위한 구현 방법 중 하나입니다.

2. “일대다 단방향 질문 있습니다.”

  • 이 링크는 일대다 단방향 관계에 대한 질문에 대한 답변을 제공합니다. @OneToMany, @JoinColumn 어노테이션을 활용한 멤버의 추가와 관련된 설명이 포함되어 있습니다. 이는 team.setMembers(member);와 같은 연산 대신 team.getMembers().add(member);를 사용하는 논리적 근거를 제공할 수 있습니다. 객체 관계 매핑에서는 다수의 연관 관계가 있는 경우 컬렉션을 활용하여 관계를 관리하는 것이 보편적으로 권장되는 방식입니다.

질문의 핵심은 왜 team.setMembers(member); 같은 방식 대신 List<Member>를 사용하여 관계를 설정하는가에 관한 것입니다. JPA 에서는 하나의 객체가 여러 다른 객체와 관계를 맺고 있을 때 컬렉션을 사용하여 이를 표현합니다. List<Member> 또는 다른 컬렉션 타입을 사용하는 이유는, 하나의 팀 객체가 여러 멤버 객체를 가질 수 있기 때문입니다. team.getMembers().add(member); 형태로 세팅하는 방식은 이러한 1:N 관계를 객체 수준에서 관리할 수 있게 해줍니다. 반면에, team.setMembers(member); 과 같은 방식을 사용하면 단일 객체만 처리할 수 있기 때문에, 1:N 관계를 효과적으로 표현할 수 없습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김지연님의 프로필 이미지
김지연

작성한 질문수

질문하기