[Spring] @RequiredArgsConstructor과 @Autowired 차이

·2024년 6월 18일
0

SpringBoot

목록 보기
4/6
post-custom-banner

둘 다 의존 관계의 주입(DI)을 위해 사용되는 필드이다.
그렇다면 이 둘의 차이점은 과연 무엇일까?

@RequiredArgsCOnstructor

@RequiredArgsConstructor는 롬복(Lombok) 라이브러리에서 제공하는 어노테이션이다.

해당 어노테이션은 final 필드나 @NonNull 필드에 대해 자동으로 생성자를 생성해 주고,
스프링과 함께 사용할 경우 생성자를 통해 의존성 주입을 할 수 있습니다.

사용 예

@Service
@RequiredArgsConstructor
public class MyService {

    private final MyRepository myRepository;

    // 롬복이 생성자를 자동으로 생성
    // public MyService(MyRepository myRepository) {
    //     this.myRepository = myRepository;
    // }

    // ...
}

@RequiredArgsConstructor는 생성자 주입을 명시적으로 사용하여 불변성(immutability)을 보장하고
의존성 주입에 필요한 코드를 자동으로 생성해 주므로 코드가 간결해진다.

@Autowired

Autowired는 필드, 세터, 생성자 주입 모두 붙일 수 있다.
다음은 생성자 주입을 @Autowired로 대체한 코드임

@Service
public class MyService {

    private final MyRepository myRepository;

    @Autowired
    public MyService(MyRepository myRepository) {
        this.myRepository = myRepository;
    }

    // ...
}

@Autowired는 Bean 주입시마다 달아줘야하지만,
@RequiredArgsConstructor는 해당 클래스에 달고 private final로 Bean을 주입하면 되서 코드가 깔끔해지고 가독성이 높다고 느낀다.

이런 이유에서 최근에는 @RequiredConstructor을 사용하는 추세라고 함

profile
풀스택 호소인
post-custom-banner

0개의 댓글