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

파이팅파이팅님의 프로필 이미지

작성한 질문수

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

양방향 연관관계와 연관관계의 주인 1- 기본

양방향 연관관계 질문 있습니다

24.07.07 13:47 작성

·

101

·

수정됨

0

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

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

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

[질문 내용]
5분 18 초에서 필드에서 컬렉션을 초기화해주는 이유가 add할때 nulpointexception을 안뜨게 하기 위해서라고 말씀하셨습니다.

근데 엔티티의 객체를 만들 때, 컬렉션을 생성하고 초기화해서 사용하지 않고 필드에서 초기화해서 사용하는 명확한 이유가 잘 이해가 안되는데 왜 그런건가요??

답변 1

1

인프런 AI 인턴님의 프로필 이미지

2024. 07. 07. 13:51

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

질문해주신 “필드에서 컬렉션을 초기화해주는 이유”에 관하여, 같은 강의 내 필드에 있는 컬렉션을 초기화 시키는 이유가 뭔가요?이라는 질문에 대한 답변이 도움이 될 것 같습니다.

해당 질문에서는 필드에서 컬렉션을 초기화하는 이유를 두 가지로 설명하고 있습니다. 첫 번째는 말씀하신대로 NullPointException 방지입니다. 그리고 두 번째 이유는 하이버네이트가 엔티티를 영속화 할 때 내부적으로 컬렉션을 하이버네이트가 제공하는 특별한 클래스로 변경하기 때문입니다. 이를 통해 컬렉션 내의 데이터 변경 사항 등을 인식할 수 있습니다. 그런데 만약 개발자가 엔티티 클래스 내에서 이 컬렉션을 직접 new ArrayList<>()와 같은 방식으로 초기화한다면, 하이버네이트가 관리하기 위해 변경한 컬렉션과 개발자가 이후에 변경한 컬렉션이 달라져, 하이버네이트가 이를 제대로 관리하지 못하는 문제가 발생할 수 있습니다. 따라서, 필드에서 바로 컬렉션을 초기화하는 것이 좋습니다.

이러한 문제를 방지하기 위해 엔티티 클래스에서 관계를 가지고 있는 컬렉션 필드는 선언과 동시에 초기화하는 것이 권장되며, 이를 통해 후에 발생할 수 있는 예기치 않은 문제들을 방지할 수 있기 때문입니다.

특히, JPA를 사용할 때 컬렉션 필드를 바로 초기화하는 것은 가장 베스트 프랙티스 중 하나로 꼽힙니다. 이는 컬렉션이 null이 아님을 보장함으로써 안정성을 제고하고, 하이버네이트와 같은 JPA 구현체가 컬렉션을 더 효율적으로 관리할 수 있게 하기 때문입니다.

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