Spring 개발에서 @RequiredArgsConstructor는 매우 자주 사용되는 Lombok 어노테이션 중 하나다. 특히, 의존성 주입 시 활용도가 높으며, 코드의 간결성과 안정성을 동시에 제공한다.
@RequiredArgsConstructor란?
Lombok의 @RequiredArgsConstructor는 클래스의 final 또는 @NonNull 필드를 초기화하는 생성자를 자동으로 생성해주는 어노테이션이다.
사용 예시
@RequiredArgsConstructor
public class MyService {
private final MyRepository myRepository;
}
위 코드는 다음과 같은 생성자를 자동으로 생성한다.
public MyService(MyRepository myRepository) {
this.myRepository = myRepository;
}
이때 @RequiredArgsConstructor 사용하기 위해서는 필수 의존성 필드에 반드시 final 키워드를 붙여야 한다.
왜 final을 붙여야 할까?
final 키워드는 필드 값을 변경할 수 없도록 강제한다.
의존성 주입 후 해당 의존성이 변경되지 않음을 보장하며, 이로 인해 안정성이 높아지며
특히, 멀티스레드 환경에서 객체의 상태가 의도치 않게 변경되는 문제를 방지할 수 있다.
final 키워드는 해당 필드가 반드시 생성자에서 초기화되도록 강제한다.
이로 인해, 의존성 주입이 누락된 경우 컴파일 에러가 발생한다.
@RequiredArgsConstructor
public class MyService {
private final MyRepository myRepository;
private final AnotherDependency anotherDependency;
}
// 생성자 주입 누락
MyService myService = new MyService(new MyRepository());
// 컴파일 에러 발생!