본문 바로가기

[Spring] 스프링 컨테이너 & DI(Dependency Injection)

인포꿀팁 발행일 : 2020-11-24

IOC(Inversion Of Control) 컨테이너

컨테이너란?

  • 컨테이너는 어플리케이션을 관련 라이브러리 및 종속항목과 함께 패키지로 묶어 소프트웨어 서비스 구동을 위한 격리 환경을 제공한다.
  • 컨테이너는 보통 인스턴스의 생명주기 관리와 추가적인 기능을 제공한다.
    • 서블릿 컨테이너는 서블릿의 생성, 생성 후 초기화, 서비스 실행, 소멸에 관한 권한을 가지고 있다.
    • 개발자가 직접 서블릿을 생성하고 서비스하지 않는다.
  • 스프링 컨테이너는 스프링 컨테이너의 핵심부에 있으며 , 종속객체 주입을 이용하여 애플리케이션을 구성하는 컴포넌트들을 관리한다.

IOC(Inversion Of Control)란?

  • ioc는 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미한다.
  • 즉 인스턴스 생성에서 소멸까지 생명주기 관리를 개발자가 아닌 컨테이너가 담당한다는 것이다.
  • 컴포넌트 의존관계 결정, 설정, 및 생명주기를 해결하기위한 디자인 패턴중 하나이다.
  • ioc는 객체간의 결합도를 줄이고 유연한 코드를 작성하게 되어 가독성 및 코드의 중복 유지보수를 편하게 할 수 있다.

IoC 구현방법

  • DL(Dependency Lookup, 의존성 검색)
    • 저장소에 저장되어 있는 bean에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean을 Lookup
    • EJB, Spring등에서 지원
  • DI(Dependency Injection, 의존성 주입)
    • 각 클래스간의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결한다.
    • 의존성 주입방법
      • Constructor Injection
      • Method Injection
      • Field Injection

*DI의 장점

  • Dependency Reduction : 객체 상호 간 의존성 관계를 줄여준다.
  • Reusable Structure : 코드의 재사용과 조합이 용이하다.
  • Readability : 코드들이 분리되어 가독성이 높다.
  • Loose Coupling & Easy to change : 구조는 변화에 민감하지 않을 수 있다.

 

댓글