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 컨테이너의 핵심적인 클래스

  1. 빈 팩토리 BeanFactory (org.springframework.beans.factory.BeanFactory)
    DI의 기본사항을 제공하는 가장 단순한 컨테이너
    스프링 IoC 컨테이너 최상위에 있는 인터페이스

  2. 애플리케이션 콘텍스트 ApplicationContext (org.springframework.context.factory.BeanFactory)
    DI를 위한 BeanFactory에 엔터프라이즈 어플리케이션 개발에 필요한 여러가지 기능을 추가한 것.
    BeanFactory의 서브 인터페이스인 ListableBeanFactory와 HierachicalBeanFactory라는 두 개의 인터페이스를 상속하기 때문에 BeanFactory를 상속하고 있습니다.

BeanFactory

 Bean?: IoC에서 관리되는 일반적인 객체

Leave a comment