Spring IoC란?

2025. 6. 11. 10:35Spring Framework/Spring IoC

 

Spring Framework에서 가장 핵심이 되는 개념중 하나가 바로 IoC(Inversion of Control, 제어의 역전) 원칙이다.

객체의 생성과 그 객체라 필요로 하는 의존 객체의 연결(주입)을 개발가자 아닌 Spring IoC Container가 관리해주는 것을 의미한다.
이 개념을 구체적으로 구현한 방식이 바로 의존성 주입(D.I, Dependency Injection)이다.

스프링에서는 이 모든 과정을 IoC 컨테이너가 대신 처리한다. 즉, 객체 스스로가 다른 객체를 생성하거나 찾는 대신, 스프링이 적절한 객체를 알아서 만들어 연결해 준다.

이러한 방식은 객체 간의 결합도를 낮추고, 코드의 유지보수성과 확정성을 높이는 데 큰 도움을 준다.

 

🌱 Spring IoC(Inversion of Control)란? 

IoC(제어의 역전)은 애플리케이션에서 객체의 생성, 관리, 의존성 설정을 개발자가 직접 하지 않고, 스프링 프레임워크가 대신 처리하는 설계 원칙이다

제어(Control)를 개발자 → 프레임워크(Spring)로 넘기는 것이 핵심이다.

 

왜 필요할까

🔸 전통적인 방식

MemberService service = new MemberService(); // 직접 생성하고 직접 관리
  • 객체 생성, 관계 설정을 직접 해야 함
  • 코드가 강하게 결합되어 테스트. 확장이 어려움

🔹 IoC 적용 후(Spring 사용)

ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService service = context.getBean(MemberService.class);
  • 객체 생성과 주입은 스프링 IoC 컨테이너가 담당
  • 유연하고, 테스트하기 쉬운 구조가 됨

▶️ 스프링에서 IoC 적용 방벙 : 의존성 주입(DI)

스프링은 IoC를 구현하기 위해 DI(Dependency Injection) 방식을 사용한다.
즉, 필요한 객체(의존성)를 직접 new로 생성하지 않고, 외부에서 주입받는다.

  • Constructor arguments
  • 필드 주입
  • 세터 주입

🧰 Spring IoC Container

스프링 프레임워크에서 이 두 패키지는 IoC 컨테이너의 핵심 기반을 이루는 요소다.

  • org.springframework.beans
  • org.springframework.context

🏭 BeanFactory와 ApplicationContext

🔸 BeanFactory(기본 인터페이스)스프링 IoC 컨테이너의 기본 인터페이스로, 객체(Bean)를 관리할 수 있는 기본 기능을 제공한다.하지만 엔터프라이즈 애플리케이션에 필요한 다양한 기능은 부족하다. 

 

🔹 ApplicationContext(BeanFactory의 하위 인터페이스)

ApplicationContext는 BeanFactory의 하위 인터페이스로서, BeanFactory보다 더 많은 기능을 제공한다.

기능  
AOP와의 쉬운 통합 스프링의 AOP 기능과 자연스럽게 통합되어 자동 프록시 생성, 트랜잭션 처리 등 지원
메시지 리소스 처리 (국제화) MessageSource를 통해 다국어 메시지(properties 파일) 처리 가능
이벤트 발행 기능 ApplicationEventPublisher를 통한 커스텀 이벤트 발행 및 수신 기능 제공
웹 전용 컨텍스트 지원 WebApplicationContext 등 서블릿 환경 전용 컨텍스트 지원

 

BeanFactory는 최소 기능만 제공하는 기본 컨테이너고, ApplicationContext는 실무용으로 확장된 고급 컨테이너이다.

실제로 대부분의 스프링 애플리케이션에서는 ApplicationContext를 사용한다.

'Spring Framework > Spring IoC' 카테고리의 다른 글

Bean의 인스턴스화 방법  (0) 2025.06.11
Bean 이름 지정 (Naming Beans)  (0) 2025.06.11
Bean Definition(정의)  (0) 2025.06.11
Spring IoC Container  (1) 2025.06.11
Bean과 Configuration Metadata  (0) 2025.06.11