Spring Boot

[Spring Boot]@RequiredArgsConstructor란?

우주물고기 2025. 5. 3. 14:51
반응형

많이 쓰이는 @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의 초기화를 자동으로 생성자 만들어서 해주는거임.

편하다~~~

반응형