Spring IoC Container이란?

영석·2025년 6월 10일

Spring

목록 보기
3/4
post-thumbnail

💡 Inversion of Control

개발자가 제어하는 권한들을 프레임워크에 위임하는 설계방식

객체의 생성, 의존성 주입, 생명주기까지 통틀어서 개발자가 아닌 프레임워크가 관리하는 방식입니다.

Spring에서는 위와 같은 작업을 IoC Container가 담당합니다.

Spring IoC Container의 구성요소

  • Bean 정의
  • BeanFactory / ApplicationContext
  • LifeCycle 담당
  • 의존성 관리 (DI/DL)

IoC Container는 여러 구성요소로 이루어져 있습니다.
이를 통해 취할수 있는 장점은 무엇이 있을까요?

🥑 장점

✅ 개발 생산성이 향상된다.

  • 객체의 생성과 주입, 생명주기관리를 프레임워크가 담당하게 되면
    개발자는 비즈니스 로직에 집중할 수 있게 됩니다.

✅ 테스트에 용이하다.

  • 의존성을 외부에서 주입받기 때문에 테스트시 필요한 Mock, Stub을 외부에서 코드변경없이 주입할수 있습니다.

✅ 구현체 변경에 의한 코드 수정이 없다.

  • 내부에서 객체를 생성하지 않고 외부에서 주입받아 사용하기 때문에
    기존 비즈니스 로직의 변경이 없습니다.

✅ 객체의 생명주기 및 의존성 주입이 표준화된다.

  • 프레임워크에서 관리되기 때문에 표준화되어, 코딩방식이 일관적이게 유지됩니다.

이러한 장점에 큰 영향을 주는 의존성관리 (DI, DL)의 개념을 알아보겠습니다.

📚 DI - Dependency Injection

IoC Container가 필요한 의존성을 자동으로 주입해주는 방식
이를통해 객체내부에서 필요한 객체를 생성하지 않고 외부에서 주입받게 됩니다.
DI방식을 이용함으로서 테스트용이성, 컴포넌트간 결합도를 낮춰주는 장점을 가지게 됩니다.

public class OrderService {

    private final OrderRepository orderRepository;

    public OrderService(OrderRepository orderRepository) {
        this.orderRepository = orderRepository;  // IoC 컨테이너가 외부에서 주입해줌
    }
}

📚 DL - Dependency Lookup

IoC Container에 등록된 의존성을 조회해서 주입하는 방식
객체 내부에서 필요한 객체를 개발자가 직접 조회하여 등록된 객체를 가져와서 사용하는 방식임

  • 하지만 DL방식은 유연성 및 테스트가 DI방식보다 불리합니다 이 때문에 주로 DI 방식이 사용됩니다.
ApplicationContext context = ...;
OrderRepository repository = context.getBean(OrderRepository.class);  // 직접 조회

마무리

개발중 느끼지 못했지만 편했던것들이 IoC 컨테이너가 자체적으로 관리해주고 있다는 것을 다시한번 알게 되었습니다, 다음 포스트에는 생성자 주입이 권장되는 이유를 포스팅 하겠습니다

profile
느리게 갱신되는 개발실력 - >_0

0개의 댓글