2025. 6. 11. 10:35ㆍSpring 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 |