본문 바로가기
반응형
Spring/JPA

@NoArgsConstructor(access = AccessLevel.PROTECTED) 쓰는 이유

by brightGarden02 2023. 10. 11.

 

엔터티 혹은 DTO 작성시 @NoArgsConstructor(access = AccessLevel.PROTECTED) 어노테이션을 많이 사용한다.

 

@NoArgsConstructor에 AccessLevel설정으로 AccessLevel.PUBLIC, AccessLevel.PRIVATE, AccessLevel.PROTECTED가 있다.

 

왜 @NoArgsConstructor(access = AccessLevel.PROTECTED)를 많이 쓰는 것일까?

 

문제점부터 알아보자.

 

문제점

@NoArgsConstructor(access = AccessLevel.PUBLIC):

1. 기본 생성자를 사용하는 방식을 여러 곳에서 생성이 가능하다.(BAD)

2. 객체 데이터에 빈값이 들어가는 일관성에 문제가 생길 수 있다.

 

@NoArgsConstructor(access = AccessLevel.PRIVATE):

프록시 객체 생성이 안되기에 문제가 생길 수 있다.

 

 

 

따라서 @NoArgsConstructor(access = AccessLevel.PROTECTED)을 많이 쓰는 이유는

1. 프록시 객체의 생성을 가능하게  하기 위합니다.

2. 외부에서는 객체를 직접 생성할 수 없게 하기 위함이다.

 

 

댓글


반응형
반응형