본문 바로가기
⚙️Backend/Spring

[Spring] DI (Dependency Injection) part 3

by Bㅐ추 2020. 5. 30.
728x90
반응형

2020/05/30 - [🌎Web Application/Spring] - [Spring] Spring 이란

2020/05/30 - [🌎Web Application/Spring] - [Spring] DI (Dependency Injection) part 1

2020/05/30 - [🌎Web Application/Spring] - [Spring] DI (Dependency Injection) part 2

 

3. DI의 적용방법

DI는 어떤 객체가 필요한 객체를 외부에서 밀어넣는 것(주입하는 것) 이다.

주입을 받는 입장에서는 어떤 객체인지 신경 쓸 필요가 없다. 어떤 객체에 의존하든 자신의 역할은 바뀌지 않기 때문이다.

 

( 3-1 ) 스프링 컨테이너

주입을 이용하여 객체를 관리하는 컨테이너이다. 컨테이너의 사전적 의미는 무언가를 담는 용기, 즉 그릇을 의미한다. 이를 통해 접급하자면 컨테이너는 객체관리를 주로 수행하는 그릇정도로 이해할 수 있다. 빈의 생성과 관계, 사용, 생명 주기등을 관장한다. 컨테이너를 통해 시스템 전반에서 언제는 사용가능하다.

 

왜 스프링은 컨테이너라는 기능을 제공하는 것일까?

 

우리는 객체를 사용하기 위해서 new 생성자를 이용하거나 getter/setter 기능을 써왔다.  한 어플리케이션에는 이러한 객체가 무수히 많이 존재하고 서로 참조하고 있을 것이다. 서로 참조하는 정도가 심할 수록 의존성이 높다고 표현한다. 낮은 결합도와 높은 캡슐화로 대변되는 객체지향프로그래밍에서 높은 의존성은 아니꼬울 수 밖에 없다. 의존성 제어, 즉 객체 간의 의존성을 낮추기 위해 바로 Spring 컨테이너가 사용된다.

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

 

이때 스프링 컨테이너가 생성하고 관리하는 객체들을 'Bean'이라 부른다.

 

( 3-2 ) 스프링 컨테이너의 종류

BeanFactory ApplicationContext

영어 그대로 빈 공장.
빈 객체를 생성하고 관리하는 클래스
 기본적인 의존성 주입을 지원하는 가장 간단한 형태의 컨테이너.
DI관련된 가장 단순한 클래스,컨테이너

BeanFactory의 경우 getBean()메소드가 호출될 때 까지 Bean생성을 미룬다.

 => 모든 bean을 늦게 등록 한다는 것

 BeanFactory의 자식. 좀 더 다양한 기능을 가지고 있다.
BeanFactory를 상속받아서 매우 유사하다.

 Context시작하기 전에 모든 singleton bean을 미리 등록함으로써

 bean이 필요할 때 즉/시 사용할 수 있도록 해준다.

스프링 컨테이너는 스프링 프레임워크를 초기화하는 역할을 한다.

 

 1. 스프링 컨테이너 생성 
2. Bean 들이 들어있는 XML파일이 읽힘 
3. XML파일에 등록된 Bean들의 Life Cycle과 Dependency가 관리되기 시작. 

 

스프링 컨테이너로 ApplicationContext를 사용한다는 가정하에 설명을 진행하겠다.

728x90
반응형