-
(2024-01-03 TIL) @NoArgsConstructor? @RequiredArgsConstructor? @AllArgsConstructor?TIL 2024. 1. 4. 23:12
프로젝트 중 responseDto 와 requestDto를 작성할 때 생긴 일입니다.
같은 팀원 분이 저와는 다르게 dto에 @NoArgsConstructor와 @AllArgsConstructor를 사용하는 것을 보고 이 부분에 대해 정리가 필요하다고 느껴졌습니다.
1. @NoArgsConstructor
역할: 파라미터가 없는 기본 생성자를 생성합니다.
import lombok.NoArgsConstructor; @NoArgsConstructor public class Example { // Fields }
2. @RequiredArgsConstructor
역할: 클래스의 필수인 필드를 사용하여 생성자를 자동으로 생성합니다.
import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public class Example { private final String field1; private final int field2; private String optionalField; }
위의 예제를 보면 optionalField를 제외한 filed1 과 field2는 final 키워드로 설정됐습니다.
@RequiredArgsConstructor는 final이나 @NonNull 어노테이션이 붙은 필드에만 생성자를 생성합니다.
3. @AllArgsConstructor
역할: 클래스의 모든 필드를 사용하여 생성자를 자동으로 생성합니다.
import lombok.AllArgsConstructor; @AllArgsConstructor public class Example { private String field1; private int field2; }
4. @Entity에 @NoArgsConstructor 와 @AllArgsConstructor를 같이 사용하는 이유
결론적으로 말씀드리면, @NoArgsConstructor는 JPA가 엔티티를 생성할때 필요하며, @AllArgsConstructor는 엔티티의 필드를 초기화하는데 도움됩니다.
원리를 말씀드리겠습니다.
일단 JPA에서 @Entity로 표시된 클래스는 기본 생성자가 필요합니다. 이 기본 생성자는 JPA가 entity를 생성할때 사용하게 되는데, 기본 생성자가 없는 경우는 JPA가 기본생성자를 올바르게 생성하지못하고 오류를 발생시킬 수 있습니다.
이, @NoArgsConstructor를 사용하면 컴파일시 기본생성자를 생성해주어 JPA가 엔티티를 올바르게 다룰 수 있도록 도와줍니다.
'TIL' 카테고리의 다른 글