[Spring Boot]@RequiredArgsConstructor란?
많이 쓰이는 @NoArgsConstructor랑 @AllArgsConstructor랑
비교해서 말하자면,

@NoArgsConstructor
new Member()같이 아무 인자 없는 기본 생성자 만들어주는 애너테이션임
근데 setter나 builder 없으면 무쓸모 일수도
@AllArgsConstructor
모든 필드 받아서 초기화하는 생성자 만들어주는 애너테이션임
new Member("Kim", 20); 이런식
필드가 많으면 쓸데없이 많은 인자 전달해야할수도
@RequiredArgsConstructor
주로 의존성 주입(DI)할때 많이 쓰임.
final붙은 필드나, @NonNull붙은 필드만 생성자에 포함됨.
필드가 많아도, 필요한 필드로만 생성자 딱딱 정리 가능
-> 깔끔함.
왜 @RequiredArgConstructor가 많이 쓰이냐?
스프링에서는 의존성 주입할 때, 생성자 주입을 선호함
(안전성 문제 등등때문에...)
그리고 주입을 받을 대상들 대부분은 final을 붙임(불변성을 위해)
그래서 final붙은 필드만 골라서 생성자를 만들어주는 @RequiredArgConstructor가 딱 적합한것!
예를들어서
UserService클래스에서, UserRepository를 주입받아야 하는 상황 💉
1. @RequiredArgConstructor없이 그냥 할 경우!!!
@Service
public class UserService {
private final UserRepository userRepository;
// 생성자 직접 작성
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
이렇게 해야됨.
여기서 핵심은, userRepository가 final 변수라는거!!
따라서 생성자에서 초기화가 필수임.
근데 @RequiredArgConstructor가 없으면 위 코드처럼 직접 해줘야됨.
2. @RequiredArgConstructor가 있는 경우
@RequiredArgsConstructor
@Service
public class UserService {
private final UserRepository userRepository;
}
이렇게 깔끔하게 됨! final붙은 userRepository의 초기화를 자동으로 생성자 만들어서 해주는거임.
편하다~~~