양방향 연관관계 질문 있습니다
203
작성한 질문수 15
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
5분 18 초에서 필드에서 컬렉션을 초기화해주는 이유가 add할때 nulpointexception을 안뜨게 하기 위해서라고 말씀하셨습니다.
근데 엔티티의 객체를 만들 때, 컬렉션을 생성하고 초기화해서 사용하지 않고 필드에서 초기화해서 사용하는 명확한 이유가 잘 이해가 안되는데 왜 그런건가요??
답변 1
1
안녕하세요, 인프런 AI 인턴입니다.
질문해주신 “필드에서 컬렉션을 초기화해주는 이유”에 관하여, 같은 강의 내 필드에 있는 컬렉션을 초기화 시키는 이유가 뭔가요?이라는 질문에 대한 답변이 도움이 될 것 같습니다.
해당 질문에서는 필드에서 컬렉션을 초기화하는 이유를 두 가지로 설명하고 있습니다. 첫 번째는 말씀하신대로 NullPointException 방지입니다. 그리고 두 번째 이유는 하이버네이트가 엔티티를 영속화 할 때 내부적으로 컬렉션을 하이버네이트가 제공하는 특별한 클래스로 변경하기 때문입니다. 이를 통해 컬렉션 내의 데이터 변경 사항 등을 인식할 수 있습니다. 그런데 만약 개발자가 엔티티 클래스 내에서 이 컬렉션을 직접 new ArrayList<>()와 같은 방식으로 초기화한다면, 하이버네이트가 관리하기 위해 변경한 컬렉션과 개발자가 이후에 변경한 컬렉션이 달라져, 하이버네이트가 이를 제대로 관리하지 못하는 문제가 발생할 수 있습니다. 따라서, 필드에서 바로 컬렉션을 초기화하는 것이 좋습니다.
이러한 문제를 방지하기 위해 엔티티 클래스에서 관계를 가지고 있는 컬렉션 필드는 선언과 동시에 초기화하는 것이 권장되며, 이를 통해 후에 발생할 수 있는 예기치 않은 문제들을 방지할 수 있기 때문입니다.
특히, JPA를 사용할 때 컬렉션 필드를 바로 초기화하는 것은 가장 베스트 프랙티스 중 하나로 꼽힙니다. 이는 컬렉션이 null이 아님을 보장함으로써 안정성을 제고하고, 하이버네이트와 같은 JPA 구현체가 컬렉션을 더 효율적으로 관리할 수 있게 하기 때문입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
33
2
inheritance startegy 선택시 고려사항
0
25
1
Entity 동등성 비교
0
25
1
실무 조언 관련 질문입니다.
0
49
1
H2데이터베이스 파일 생성
0
60
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
57
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
58
1
JPQL 메소드와 락
0
57
1
Delivery @OneToOne
0
64
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
98
2
UnsupportedOperationException 발생
0
89
3
H2 Database 연결이 안됩니다.
0
98
2
연관관계 매핑 질문드립니다.
0
88
2
h2데이터베이스 실행오류
0
110
2
persistence.xml
0
112
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
83
1
영속성 컨텍스트
0
70
1
JPA 프록시
0
100
1
Native Query와 MyBatis
0
74
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
93
1
임베디드 타입 예시 코드 관련 질문
0
121
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
97
3
인텔리제이 패키지 커서 단축키 질문
0
109
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
149
1





