목표

  • @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

참고 자료