공부공부/Java

[Lombok] @RequiredArgsConstructor / @NoArgsConstructor / @AllArgsConstructor

이숭간 2021. 5. 22. 16:31
728x90

@RequiredArgsConstructor

초기화되지 않은 final필드나, @NonNull이 붙은 필드에 대해 생성자를 생성해준다.
주로 의존성 주입 편의성을 위해 사용된다.

해당 어노테이션으로 의존성주입이 가능한이유는 다음과 같다.

 - 어떠한 빈에 생성자가 오직 하나만 있고 생성자의 파라미터 타입이 빈으로 등록가능한것이면 이 빈은 @Autowired없이도 의존성주입이 가능 

 

즉, 생성자 안만들고 생성자주입이 가능하다!!

 

@NoArgsConstructor

파라미터가 없는 기본생성자를 생성해준다.

 

사용시 주의점

1. 필드들이 final로 생성되어있는 경우에는 필드를 초기화할수 없기 때문에 생성자를 만들수 없고 에러가발생

(final키워드가 붙은 필드들은 선언과동시에 초기화하고 이후에 값을 수정할수 없으니까)

이 때는 @NoArgsConstructor(force = true) 옵션을 이용해서 final 필드를 0, false, null 등으로 초기화를 강제로 시켜서 생성자를 만들 수 있습니다.

 

2. @NonNull과 같이 필드에 제약조건이 설정되어있는 경우, 생성자내 null-check로직이 생성되지 않는다.

 

@AllArgsConstructor

클래스에 존재하는 모든 필드를 포함하는 생성자를 자동으로 생성해준다.

 

참고링크

https://webdevtechblog.com/requiredargsconstructor-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85-dependency-injection-4f1b0ac33561

https://dingue.tistory.com/14