코딩/Spring
[Spring] Entity에 protected 생성자를 만드는 이유(@Noargsconstructor)
it 끄적이기
2022. 11. 15. 09:12
[Spring] Entity에 protected 생성자를 만드는 이유(@Noargsconstructor)
기본 생성자의 접근제어를 Protected로 설정해놓게 되면 무분별한 객체 생성에 대해 한번 더 체크할 수 있기 때문입니다.
예시)
@Getter
@Setter
@NoArgsConstructor
public class User{
private Long id;
private String name;
private Long age;
private String email;
}
public static void main(String[] args){
User user = new User();
user.setName("이름1");
user.setEmail("이메일1");
}
위 User 클래스와 main 함수를 보면 이름과 이메일만 setter를 사용해 값을 설정해준것을 볼 수 있는데
이렇게 될 경우 age값이 누락되어 불완전한 객체가 되어버린다.
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class User{
private Long id;
private String name;
private Long age;
private String email;
public User(String name, String email){
this.name = name;
this.email = email;
this.age = 30L;
}
}
public static void main(String[] args){
User user = new User("이름1", "이메일1");
}
@Setter를 없애고 생성자를 통해 객체를 생성하게되어 무조건 완전한 상태의 객체가 생성되게된다.
AccessLevel을 PRIVATE으로 하게 될 경우
JPA 표준 스펙에 디폴트 생성자가 있어야하므로 Private이 될 수 없으며,
JPA가 프록시 기술을 쓸때, Jpa hibernate가 객체를 강제로 만들어야 하는데 private로 만들면 이게 다 막히기 때문이기도 하다.
그래서 protected 생성자를 사용하는 편이다.