Woopii Vyeolog

Spring 컨테이너란?(DI Container, IoC Container) 본문

Spring Framework

Spring 컨테이너란?(DI Container, IoC Container)

WooPii 2020. 3. 17. 12:41

사전적으로 컨테이너란 무언가를 담는 그릇, 용기를 의미한다. 

 

Spring 컨테이너(DI컨테이너, IoC컨테이너라고도 불린다.)도 무언가를 담는 그릇인데, 역활이 무엇이냐면 객체 관리를 주로 수행하는 그릇이다.

 

Bean의 생성과 관계, 사용, 생명 주기 등을 관장한다. 

 

Bean(빈)이란 Spring이 관리하는 인스턴스이다. 

즉, 개발자가 직접 인스턴스를 생성하고 호출, 삭제하는 것이 아니라 항상 Spring Container를 통해서 관리되는 인스턴스를 우린 Bean이라고 부른다.

 

POJO(어느곳에서 종속되지 않는 JAVA Class)와 설정(Configuration Metadata)을 Spring Container에 주입시키면 Bean으로 등록되고 사용이 가능하다는 얘기이다. (Spring Framework를 사용한다고 해서 본인이 만든 모든 Class들이 Bean으로 자동 등록되는 것은 아니다.)

 

Bean은 기본적으로 싱글톤의 스코프를 가진다. 즉, Bean으로 지정된 Class는 Container에서 1개의 인스턴스로만 존재 할 수 있다.

 

 

스프링 컨테이너 출처:  https://zetawiki.com/wiki/%EC%8A%A4%ED%94%84%EB%A7%81_IoC_%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88

 

왜 Spring에서 컨테이너 기능을 제공하는 것일까?

 

보통 객체를 사용하기 위해서는 new생성자를 이용하거나, getter/setter 기능을 이용한다.

 

하나의 어플리케이션에서는 이러한 객체가 무수히 많이 존재하고 서로 참조하고 있다.

 

참조의 정도가 심할 수록 의존성이 높다고 표현한다. 

 

낮은 결합도와 높은 캡슐화로 대표되는 OOP(객체 지향 프로그래밍)에서 높은 의존성은 그 특성을 잘 살렸다고 보기 어렵다.

 

의존성의 제어, 즉 객체간의 의존성을 낮추기 위해서 Spring컨테이너가 사용된다. 

 

객체 내부에서 다른 객체 사용 (출처:  http://private.tistory.com/39)

 

 

그림3 스프링 컨테이너를 이용한 객체 사용 방법 (출처: http://private.tistory.com/39)

 

 

 

 

스프링 컨테이너의 종류

Spring이 제공하는 대표적인 Spring Container는 BeanFactory와 ApplicationContext가 있다. 

 

BeanFactory는 DI Container의 기본이 되는 인터페이스인데, Bean을 관리하는 역할을 하는 인터페이스이다.

ApplicationContext는 BeanFactory를 상속한 인터페이스로 BeanFactory의 기능외에 추가적으로 AOP와 같이 대규모 웹 프로젝트에 필요한 여러 확장기능들을 포함하고 있다. 이로인해 Spring 프로젝트의 대부분은 ApplicationContext을 통해 Bean을 관리한다. 

 

 

 

 

 

 

출처 : https://jojoldu.tistory.com/28

 

ServletContainer? DI Container? Bean? POJO?

매주 월/목요일 저녁마다 박재성(a.k.a 자바지기)님의 Java 강의를 수강중이다. (현재 1기인데 다음 2기가 시작되면 꼭꼭 듣길 추천한다. 참고) 매 시간마다 즐거운 깨달음의 연속이지만 특히나 어제 (2016년 7월..

jojoldu.tistory.com

 

출처 : http://www.incodom.kr/spring/%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88

 

spring/컨테이너

# Spring 컨테이너란?

www.incodom.kr

 

Comments