[Spring Boot] @NoArgsConstructor란?

Sungjin Cho·2023년 7월 26일
1

Spring Boot

목록 보기
2/15
post-thumbnail

보통 많이 쓰는 생성자 어노테이션으로는

@AllArgsConstructor
@RequiredArgsConstructor
@NoArgsConstructor

세가지 정도가 있다.

여기서 @NoArgsConstructor 는 엔티티에 꼭 들어가는 어노테이션이다.

그 이유는 Java에서는 생성자가 없을 경우 자동으로 No-Args-Constructor 를 만들어주는데 정의되어 있는 생성자가 있을 경우 No-Args-Constructor를 자동으로 생성하지 않기 때문이다.

따라서 엔티티에 생성자를 만들면 No-Args-Constructor를 직접 정의해주어야 하는데 이를 @NoArgsConstructor 통해 하는 것이다.


No-Args-Constructor 는 왜 필요할까?

이유는 Proxy 패턴 때문이다.
Jpa에서는 자주 Lazy Loading을 통해서, 객체를 프록시 형태로 조회한다.

프록시가 적용되는 방식

엔티티를 상속하는 프록시 객체를 정의.
이 프록시 객체를 초기화하기 위해 부모 객체,
즉 엔티티의 NoArgsConstructor를 호출.

그래서 NoArgsConstructor가 필요한 것!!


NoArgsConstructor의 access level이 protected 이상이어야 하는 이유

위에서 설명한 것 처럼 자식 객체가 부모 객체의 생성자를 호출해야 하기 때문이다.
private으로 설정된 경우, 자식 객체는 부모 객체의 생성자에 접근할 수 없기 때문에 에러가 발생한다.

참고: https://velog.io/@mincho920/Spring-NoArgsConstructor

1개의 댓글

comment-user-thumbnail
2023년 7월 26일

좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기