🔥스파르타 TIL (Spring)

IoC 컨테이너 활용: 생성자 주입과 빈 조회 방식

승승장규 2025. 3. 6. 13:04

객체의 불변성을 유지하기 위해 변수를 final로 선언하며, 해당 변수를 즉시 초기화하거나 생성자를 통해 주입하는 방식을 사용한다. 생성자 주입은 객체 생성 시점에 의존성을 명확히 하고, 테스트 용이성과 코드 가독성을 높이는 장점이 있다.

 

@Autowired 어노테이션을 사용하면 IoC 컨테이너에 의해 관리되는 빈을 주입받을 수 있다. 하지만 자동 의존성 주입으로 인해 객체 간 명시적인 의존관계가 모호해질 수 있고, 반드시 스프링 IoC 컨테이너에서 관리되는 빈 클래스에만 사용이 가능하기 때문에 추천하지 않는 방식이다.

 

수동으로 직접 IoC 컨테이너에 접근해서 빈을 가져오는 방법을 살펴보자

 

ApplicationContext context : 빈 팩토리 등등의 클래스들을 상속받은 클래스. IoC 컨테이너라고 생각하면 될 것 같다.

// 1. 빈의 이름으로 가져오기

public UserService(ApplicationContext context){
    UserRepository userRepository = (UserRepository) context.getBean("bean의 이름 ex) userRepository")

    this.userRepository = userRepository;
}

// 2. 빈의 클래스 형식으로 가져오기

UserRepository userRepository = context.getBean(UserRepository.class);

 

많이 사용하는 방법으로는 @RequiredArgsConstructor 어노테이션을 사용할 수 있다.

 

@RequiredArgsConstructor : Lombok 라이브러리에서 제공하는 기능 중 하나로, 클래스 내에 final 또는 @NotNull 어노테이션이 붙은 필드들을 인자로 갖는 생성자를 자동으로 생성해준다.

@RequiredArgsConstructor
public class UserService{

// final이 붙어있기 때문에 자동으로 생성자 주입이 만들어짐
    private final UserRepository userRepository;

//    public UserService(UserRepository userRepository){
//        this.userRepository = userRepository;
//    }
}