IoC의 개념

  • IoC(Inversion of Control, 제어권의 역전)이란 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미한다.
  • 자주 사용하는 객체들을 미리 메모리에 올려 놓고, 클라이언트에서 해당 객체를 요청해오면 객체를 빌려준 후 소멸 시키지 않고 재활용
  • 스프링 컨테이너: IoC 개념을 구현하기 위해서 사용됨
  • 컴포넌트 의존관계 결정(component dependency resolution), 설정(configuration) 및 생명주기(lifecyle)를 해결하기 위한 디자인 패턴(Design Pattern)

 

 

IoC 컨테이너

  • 스프링 프레임워크도 객체에 대한 생성 및 생명주기를 관리할 수 있는 기능을 제공하고 있음. 즉, IoC 컨테이너 기능을 제공한다.
  • IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리한다.
  • POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다.
  • 개발자들이 직접 POJO를 생성할 수 있지만 컨테이너에게 맡긴다.
  • 요청이 많은 애플리케이션에서는 컨테이너를 사용하지 않으면 부하가 걸릴 수 있다.

 

 

IoC 컨테이너 종류

  • 피코 컨테이너, Pico Container
  • 구글 주스 컨테이너, Guice Container

 

 

IoC 분류

1) DL (Dependency Lookup): 의존성 검색

저장소에 저장되어 있는 Bean에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean을 Lookup하는 것

(클라이언트에서 객체 타입이나 아이디를 통해 컨테이너에서 필요한 객체를 찾는 것)

 

2) DI (Dependency Injection): 의존성 주입

각 클래스간의 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것

(빈 설정 파일 > XML)

 

※ DL 사용 시 컨테이너 종속성이 증가하여 주로 DI를 사용함 (Setter, Constructor, Method Injection)

 

 

Spring IoC 관련 용어

Managed Bean

  • 스프링 컨테이너에 의해서 관리되는 객체
  • 스프링 빈 이라고도 함
  • 스프링 설정파일에 <bean> 태그로 등록되어 사용
  • Annotation으로 자동 등록 기능(Component Scan) 사용 가능

 

Spring Container

  • 관리되어지는(managed) 빈이 모여 있는 곳
  • IoC 컨테이너로써 Application Context 클래스로 구현됨
  • Context라는 용어가 들어 있으면 Bean이 모여서 관리되는 컨테이너를 의미

 

 

 

실습

1. TestDAO 작성

  -  패키지 생성

 

 

  -  HelloDAO.java 클래스 생성

 

 

  -  HelloMain.java 클래스 생성

 

 

 

2. TestDAO 빈컨테이너에 등록

  -  스프링 설정 파일 생성

 

 

 

3. TestDAO DL로 사용

  -  getBeanLookup을 지원

 

 

 

 

Summary

  • 스프링은 스프링 컨테이너에 빈(자바 객체)을 로딩하여 관리한다.
  • 빈을 자동으로 관리해주는 기능(IoC)은 스프링의 핵심 기능 중 하나이다.

 

 

 

 

+ Recent posts