엔터티 혹은 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. 외부에서는 객체를 직접 생성할 수 없게 하기 위함이다.
'Spring > JPA' 카테고리의 다른 글
[JPA] OneToMany 관계일 때 컬렉션 조회를 통한 쿼리성능개선 (0) | 2022.11.05 |
---|
댓글