프레임워크/Spring Boot

@RequiredArgsConstructor

코드몬스터 2025. 12. 14. 16:24
728x90

 

 

해당 내용은 GPT에게 물어본 내용입니다.

 

 

왜 해당 어노테이션을 사용할 때는 final이 붙어야 하는지 질문을 받은 적이 있다.

습관적으로 final을 사용하고 있었고, 이유를 정리해보려고 한다.

 

1. @RequiredArgsConstructor의 정확한 의미

이름 그대로 필수(requried)필드만을 파라미터로 받는 생성자를 만들어 준다.

 

필수 필드는 다음 두 가지이다.

  1. final 필드
  2. @NonNull 이 붙은 필드

 

2. 왜 final 필드만 대상인가?

객체 생성 시, 반드시 초기화 되어야 하는 필드를 명확히 구분하기 위해서이다.

 

Java에서 final 필드는:

  • 생성자에서 반드시 한 번 초기화되어야 하고
  • 이후 변경 불가능합니다.

즉, Lombok 입장에서는:

  • 해당 필드는 생성 시점에 반드시 값이 있어야 한다.