Spring

Spring Framework DI (Dependency Injection) 의존성 주입

0304호 2023. 1. 30. 15:56

Spring DI / IoC

 

IoC = 설명할 수 있을 정도로 중요함

IoC : Inversion ofControl

프로그램을 제어하는 패턴 중 하나

DI 는 IoC패턴의 구현방법 중 하나

DI에 따라 프로그램의 흐름이 완전히 뒤바뀐다

 

스프링 IoC컨테이너 는

기존의 객체를 필요할 때 생성해서 사용하던 방식을 (new ~~~)

-> 객체를 미리 생성해 놓고 꺼내서 사용하는 형태로 바뀐다.

 

대표적으로 application-context가 있음

 

//

DI 는  Dependency Injection의 줄임말

스프링 Container 에 만들어둔 각종 클래스(bean)들은 서로 의존적이다

 

ex) 의존적이다?

A클래스는 B클래스가 없으면 실행 할 수 없다

A는 B에 의존적이다

즉 객체 안에 객체가 저장되는 형태이다

이걸 DI (Dependency Injection)이라 부른다

 

ex2)

배터리에 의존해서 장난감을 만들었다.  -> 배터리에 의존적이다.

 

배터리 일체형 -> 배터리가 떨어지면 장난감을 새로 구입해야 한다.

배터리 분리형 -> 배터리가 떨어지면 배터리만 교체하면 된다.

 

DI- 프로그래밍에서 객체를 만들어서 외부에서 따로 주입하는 방법

 

2가지 의존성 주입 방법

1. 생성자를 통한 의존성 주입 <constructor-arg ref="빈의ID"></constructor-arg>

<constructor-arg ref="빈id"></constructor-arg>

1. setter를 통한 의존성 주입 XML설정

<property name="변수명" value="값"/>

<property name ="변수명" ref="객체"/>

<property name="변수명" value="값"/>
<property name="변수명" ref="객체"/>

 

 


 

 

빈(Bean)의 범위

 

싱글톤(Singleton)

스프링 컨테이너에서 생성된 빈(Bean)객체의 경우 동일한 타입에 대해서는 기 본적으로 한 개만 생성이 되며, getBean() 메소드로 호출될 때 동일한 객체가 반환 된다.

 

프로토타입(Prototype)

싱글톤 범위와 반대의 개념도 있는데 이를 프로토타입(Prototype) 범위라고 한다. 프로토타입의 경우 개발자는 별도로 설정을 해줘야 하는데, 스프링 설정 파일(application-context.xml)에서 빈 (Bean)객체을 정의할 때 scope속성을 명시해 주면 된다.

<bean id="test" class="ex01.SpringTest" scope="prototype"/>