강의

멘토링

로드맵

Inflearn brand logo image

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

gui1008님의 프로필 이미지
gui1008

작성한 질문수

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

게시글 수 구현

Entity 생성 시 access 레벨 지정해주는 이유

해결된 질문

작성

·

63

0

강의를 듣다가 한가지 궁금한 부분이 있어서 질문남깁니다.

 

Entity 객체 생성 시

NoArgConstructor 선언 시

access를 항상 AccessLevel.PROTECTED로 설정하시는데 이유가 있으실까요?

답변 2

0

쿠케님의 프로필 이미지
쿠케
지식공유자

gui1008님, 안녕하세요!

 

강의에서는 생성자 외에 별도로 팩토리 메소드를 정의하여 객체 생성 로직을 캡슐화하고, 이를 활용하여 엔티티 모델을 만들고 있습니다. (팩토리 메소드에 대한 이점은 따로 학습해보시면 좋을 것 같네요!)

그런데 만약 클라이언트 코드에서 기본 생성자를 호출할 수 있으면, 불완전한 엔티티 모델이 만들어질 수 있습니다.

이러한 상황을 방지하기 위해 기본 생성자의 AccessLevel을 protected로 지정하는 것입니다.

private이 제일 안전하지만, JPA 내부적으로 리플렉션을 사용하는게 protected까지만 허용되기 때문에 이처럼 선언하는게 일반적이네요!

0

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

Entity 클래스에서 @NoArgsConstructorAccessLevel.PROTECTED를 설정하는 이유에 대해 설명해드리겠습니다. 이는 주로 다음과 같은 이유로 사용됩니다:

이유 1: 객체 생성의 제약

  • 데이터베이스 제약: JPA에서는 엔티티가 프록시 객체로 생성되거나 데이터베이스에서 조회될 때 기본 생성자를 필요로 합니다. 그러나, 외부에서 객체를 임의로 생성하는 것을 막기 위해 PROTECTED로 설정하여 JPA와 같은 프레임워크에서만 객체를 생성할 수 있도록 제약을 두는 것입니다.

이유 2: 의도 명확성

  • 설계 의도: PROTECTED 수준의 접근 지정자는 클래스 내부나 서브클래스에서만 객체를 생성할 수 있게 합니다. 이는 엔티티 객체가 완전한 상태로 생성(예: 모든 필드에 값이 할당)되도록 유도하며, 잘못된 상태의 객체가 생성되는 것을 방지합니다.

이유 3: 일관성 유지

  • 코드의 일관성: 팀 내에서 코딩 표준을 유지하거나 코드의 일관성을 보장하기 위해 이러한 관행을 따를 수 있습니다. 이는 코드 리뷰 시 명확성과 가독성을 높일 수 있습니다.

이와 유사한 질문이나 더욱 구체적인 설명이 있는 게시물을 참고하실 수 있습니다:
- 엔티티 생성 및 접근 수준에 대한 이해 (유사 게시물 제목)

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

gui1008님의 프로필 이미지
gui1008

작성한 질문수

질문하기