해결된 질문
작성
·
350
답변 1
1
안녕하세요. highjune님, 공식 서포터즈 y2gcoder입니다.
JPA Entity의 기본생성자의 접근 제어자를 Protected로 둔 이유에 대해서 궁금해하시는 것으로 이해했습니다.
JPA 는 엔티티 객체를 생성할 때 기본 생성자를 이용해서 만들고 있습니다. 그리고 엔티티 객체를 외부에서 만들고 있기 때문에, private 접근제어자는 사용할 수 없습니다. 또한 default 접근 제어자는 해당 클래스와 같은 패키지에서만 사용할 수 있기 때문에 일반적으로 protected 생성자를 사용하는 것을 권장하고 있는 것으로 알고 있습니다.
public 접근제어자는 사실 개발자(본인, 동료)를 위해서 사용하지 않는 것에 가깝습니다. public으로 해놓으면 되기는 하나 다른 개발자(미래의 자신을 포함)가 JPA 스펙 구현을 위해서만 사용하는 해당 생성자를 사용해 외부에서 무분별하게 객체를 생성할 수 있습니다. 원래 의도와는 다르게 구현하고 사용하기 때문에, 예상치 못한 문제가 발생할 수도 있습니다. 이를 위해 protected를 사용해 해당 행위를 최대한 막아주는 것입니다.
감사합니다.