@RequiredArgsConstructor 어노테이션은 롬복(Lombok) 에서 제공하는 어노테이션이다.
- 필수 의존성 (final 또는 @NotNull 필드)에 대해 자동으로 생성자를 만들어주는 기능을 한다.
여러 의존성 주입이 있는데 @RequiredArgsConstructor어노테이션을 사용하는 이유로는
- 불변성 유지 : final 필드를 초기화하지 않으면 컴파일 에러 -> 안전한 설계 가능하다.
- 스프링 생성자 주입에 적합 : final 필드만 주입되도록 자동 생성자 생성한다.
- 코드 간결화 : 반복적인 생성자 코드를 줄일 수 있다.
- 테스트 용이성 향상 : 의존성을 명시적으로 주입받기 때문에 mocking 등 용이하다.
등이 있다.
비교하자면 생성자 주입의 예시는
public class MyService {
private UserRepository userRepository;
public setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
필드 주입
public class MyService {
@Autowired
private UserRepository userRepository;
}
세터 주입
public class MyService {
private UserRepository userRepository;
@Autowired
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
RequiredArgsConstructor어노테이션을 사용하면
@RequiredArgsConstructor
public class MyService {
private final UserRepository userRepository;
}
간단하게 작성할 수 있다.
주의할 점으로는
이 롬복은 final 또는 @NotNull 필드에 대해 생성자를 만들어주고
final이 아닌 필드는 포함되지 않는다는 점이다. setter나 별도 초기화가 필요하다.