본문 바로가기

Java/Lombok

@RequiredArgsConstructor

Final 키워드가 붙은 Field

 

'final' 키워드가 붙은 Field는 객체가 생성되는 시점에 반드시 값이 초기화 되어야 한다. final Field를 초기화하는 두가지 방법이 있다.

 

 

1. 사용자가 직접 Field에 값을 설정한다.

 

 

2. 생성자에서 해당 Field의 값을 초기화 한다.

생성자에서도 1과 같이 사용자가 직접 Field 의 값을 설정하는 방법이 있고, 생성자의 Argument로 외부에서 값을 주입받아서 값을 초기화 할 수 있다.

 

어쨌든 무조건Field를 초기화 해야한다.

코딩을 하다보면 final 키워드가 붙은 Field가 점점 많아질 수 있다. 그럴때마다 생성자의 Argument의 개수가 점점 늘어나게 된다. 그럴때마다 생성자를 새로 생성해야 한다. 이런 불편을 덜기위해, Lombok 에서는 @RequiredArgsConstructor 애너테이션을 제공한다.

 

 

@RequiredArgsConstructor 

 

@RequiredArgsConstructor는 생성자를 만들어준다. 이 생성자는 'final' 이 붙은 Field 중에 초기화 되지 않은 모든 Field를 Argument로 설정한다. 

 

 

Spring Framework에서 @RequiredArgsConstructor 사용

Spring Framework 에서는 IoC(Inversion of Control) 컨테이너가 Bean 생성시 의존성을 주입(Dependency Injection)해준다. 의존성을 주입할 때 스프링 컨테이너에 등록된 Bean 만 주입할 수 있다.

 

스프링의 IoC 컨테이너에 등록되지 않은 객체를 주입받는다면 다음과 같은 에러가 발생한다.

 

 

class 에 @Component 키워드를 붙이거나, @Configuration 을 붙인 config 클래스 내에서 객체를 생성하는 메소드에 @Bean 을 붙여서 Bean을 생성할 수 있다.

 

 

Intellij IDEA Ultimate 버전 사용 시 참고할 내용

 

Intellij IDEA Ultimate 버전에서는 Bean 으로 등록되지 않은 객체를 사용자가 직접 생성자로 주입하려하면, IDE 에서 등록되지 않은 객체라고 알려준다. 

 

Could not autowire, No beans of 'Greeting' type found.

 

그러나 @RequiredArgsConstructor 를 사용하면, Ultimate 버전에서도 빌드하기 전에는 문제가 있다는 것을 알려주지 않는다.

 

Bean 으로 등록되어있지 않아도 미리 알려주지 않는다.

 

 

'Java > Lombok' 카테고리의 다른 글

Lombok @Builder 로 Builder 패턴 적용하기  (1) 2021.09.13