@RequiredArgsConstructor가 동작하는 방식을 알아본다.
@NoArgsConstructor, @RequireArgsConstructor, @AllArgsConstructor#
@NoArgsConstructor#
- 파라미터가 없는 생성자를 만든다.
final 필드가 있어서 불가능한 경우는 컴파일 오류가 발생한다.@NoArgsConstructor(force=true) 옵션을 줄 경우, 컴파일 오류가 발생하지 않고 모든 final 필드를 0, false, null로 초기화한다.@NonNull 이 붙어있는 어노테이션이 붙어있어도 검사하지 않으므로 유의해야된다.
@RequiredArgsConstructor#
final 필드나 @NonNull 이 붙어있는 필드 중에 초기화 되지 않은 필드들을 파라미터로 가지는 생성자를 만든다.- 이 경우에는
@NonNull 이 붙어있으면 널 검사를 하기 때문에, 생성자 파라미터에 null이 있으면 NullPointerException 이 발생한다.
@AllArgsConstructor#
- 모든 필드에 대해 파라미터를 가지는 생성자를 만든다.
@NonNull이 붙어 있으면 널 검사를 한다.
필드에 붙어 있는 애노테이션을 생성자 파라미터에 넘겨주기#
- Spring 프레임워크 사용시
@Value 가 붙어있는 필드에 대해서 롬복으로 생성자를 만들면 생성자 파라미터에 @Value 가 붙지 않는다. - 이는 롬복 설정을 통해서 해결할 수 있다.
lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Value
참고 자료#