본문 바로가기

Study/Spring & Spring Boot

@Autowired 대신 @RequiredArgsConstructor

Autowired는 그 이름처럼 상횡에 맞게 IoC 컨테이너 안에 존재하는 Bean을 자동으로 주입해준다.

보통은 다음과 같이 사용한다.

 

@Service
public class FoodService {

    @Autowired
    private FoodDelivery foodDelivery;

}

 

하지만 요즘의 경향을 보면 스프링팀에서 Autowired의 사용을 권고하지 않는다.

아래와 같이 직접 생성자를 주입하여 사용하거나

 

@Service
public class FoodService {

    private FoodDelivery foodDelivery;

    public FoodService(FoodDelivery foodDelivery) {
        this.foodDelivery = foodDelivery;
    }
}

 

lombok에서 제공하는 @RequiredArgsConstructor를 사용하면 된다.

lombok을 프로젝트에 추가해주어야하며 변수를 final로 선언해야한다.

 

import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
public class FoodService {

    private final FoodDelivery foodDelivery;

}

 

생성자 주입을 사용하는 경우 아래와 같은 장점이 있다.

① 객체의 변이를 방지한다(상수 final 사용).

② 순환 참조를 방지할 수 있다.

③ 테스트 코드를 작성할 때 용이하다.

④ 코드 악취를 제거할 수 있다.

 

 

참고자료

https://galid1.tistory.com/512