IOC ( Inversion Of Control ) 와 IOC 컨테이너
Updated:
IoC(Inversion of Control, 제어의 역전)란
IoC(Inversion of Control)란 “제어의 역전” 이라는 의미로, 말 그대로 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미합니다.
객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하여 가독성 및 코드 중복, 유지 보수를 편하게 할 수 있게 합니다.
기존에 자바 기반으로 애플리케이션을 개발할 때 자바 객체를 생성하고 서로 간의 의존관계를 연결시키는 작업에 대한 제어권은 보통 개발되는 애플리케이션에 있었습니다.
1. 객체 생성
2. 의존성 객체 생성
-클래스 내부에서 생성
3. 의존성 객체 메소드 호출
그러나 Servlet 등을 사용하는 경우 Servlet Container에게 제어권이 넘어가서 객체의 생명주기(라이프사이클)을 Container들이 전담하게 됩니다.
1. 객체 생성
2. 의존성 객체 주입
-스스로가 만드는것이 아니라 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입한다.
3. 의존성 객체 메소드 호출
이처럼 IoC에서 이야기하는 제어권의 역전이 란 객체의 생성에서부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것(IoC 컨테이너)을 의미 합니다.
IOC 컨테이너란?
Spring은 하나의 프레임워크입니다.
그런데 왜 Spring 컨테이너, IoC 컨테이너라는 말을 사용할까요?
그렇다면 컨테이너의 정의는 무엇인가요?
컨테이너는 보통 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하도록 하는 것이라 할 수 있습니다.
다시 말해, 컨테이너란 당신이 작성한 코드의 처리과정을 위임받은 독립적인 존재라고 생각하면 됩니다. 컨테이너는 적절한 설정만 되어있다면 누구의 도움 없이도 프로그래머가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸을 컨트롤 해줍니다.
IOC 컨테이너의 핵심적인 클래스
IOC 컨테이너의 핵심적인 클래스
-
빈 팩토리 BeanFactory (org.springframework.beans.factory.BeanFactory)
DI의 기본사항을 제공하는 가장 단순한 컨테이너
스프링 IoC 컨테이너 최상위에 있는 인터페이스 -
애플리케이션 콘텍스트 ApplicationContext (org.springframework.context.factory.BeanFactory)
DI를 위한 BeanFactory에 엔터프라이즈 어플리케이션 개발에 필요한 여러가지 기능을 추가한 것.
BeanFactory의 서브 인터페이스인 ListableBeanFactory와 HierachicalBeanFactory라는 두 개의 인터페이스를 상속하기 때문에 BeanFactory를 상속하고 있습니다.
Bean?: IoC에서 관리되는 일반적인 객체
Leave a comment