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

highjune님의 프로필 이미지
highjune

작성한 질문수

실전! Querydsl

예제 도메인 모델과 동작확인

생성자

해결된 질문

작성

·

352

0

안녕하세요

jpa 인강 다 듣고 querydsl 강의 듣고 있습니다.

 

다름이 아니라 기본생성자의 접근제한자를 PROTECTED 로 제한한 이유가 있을까요?

 

기본생성자 자체가 필요한 이유는 프록시 객체 생성시 필요하다고 알고 있는데요, 굳이 PROTECTED 로 설정한 이유를 알고 싶습니다.

 

감사합니다.

 

답변 1

1

안녕하세요. highjune님, 공식 서포터즈 y2gcoder입니다.

JPA Entity의 기본생성자의 접근 제어자를 Protected로 둔 이유에 대해서 궁금해하시는 것으로 이해했습니다.

JPA 는 엔티티 객체를 생성할 때 기본 생성자를 이용해서 만들고 있습니다. 그리고 엔티티 객체를 외부에서 만들고 있기 때문에, private 접근제어자는 사용할 수 없습니다. 또한 default 접근 제어자는 해당 클래스와 같은 패키지에서만 사용할 수 있기 때문에 일반적으로 protected 생성자를 사용하는 것을 권장하고 있는 것으로 알고 있습니다.

public 접근제어자는 사실 개발자(본인, 동료)를 위해서 사용하지 않는 것에 가깝습니다. public으로 해놓으면 되기는 하나 다른 개발자(미래의 자신을 포함)가 JPA 스펙 구현을 위해서만 사용하는 해당 생성자를 사용해 외부에서 무분별하게 객체를 생성할 수 있습니다. 원래 의도와는 다르게 구현하고 사용하기 때문에, 예상치 못한 문제가 발생할 수도 있습니다. 이를 위해 protected를 사용해 해당 행위를 최대한 막아주는 것입니다.

감사합니다.

highjune님의 프로필 이미지
highjune

작성한 질문수

질문하기