이번엔 스프링의 또다른 핵심 원리 중 하나인 IoC에 대해서 알아보도록 하겠습니다. 개념 흐름상 DI 이전에 IoC가 나왔어야했는데 순서 구성을 잘못했네요.
일반적인 프로그래밍에서 객체는 프로그래머에 의해서 생성되고 흐름 제어와 관리가 됩니다.
IoC
는 이러한 관계를 역전시켜서 프로그래머가 아닌 프레임워크가 객체를 생성하고 흐름 제어, 관리하도록 하는 것을 의미합니다.
대표적으로 DI가 IoC를 구현하는 방식 중 하나라고 생각하시면 됩니다. 스프링 컨테이너가 빈을 생성하고 주입시키면 관리를 하죠?
다시 기초 개념으로 돌아가서 스프링 컨테이너(IoC 컨테이너)가 관리하는 객체들을 빈(Bean)
이라고 부릅니다. 스프링은 이 빈들을 프로그램의 흐름에 따라서 등록/관리하고 DI를 수행합니다. 이때 빈들을 등록/관리하며 DI를 수행하는 역할을 스프링 컨테이너가 수행합니다.
이 스프링 컨테이너의 이름은 ApplicationContext
라고 부릅니다. 즉, 스프링에서는 ApplicationContext
가 빈을 등록하고 관리하는 역할을 프로그래머 대신 수행하게 됩니다.
실제 빈은 BeanFactory
라는 인터페이스에서 빈을 등록/관리/조회하게 됩니다. 그런데 위에서는 ApplicationContext
가 이 역할을 한다고 말했죠? 그 이유는 ApplicationContext
가 BeanFactory
를 상속받은 인터페이스이기 때문입니다'.
ApplicationContext
는 BeanFactory
외에도 여러 인터페이스들을 상속해서 다양한 기능을 제공하고 있습니다.
그래서 스프링 컨테이너를 실제로 사용할 때는 ApplicationContext
를 이용하게 됩니다.