본문 바로가기
Programming/Java + Spring

[Spring] DI 의존성 주입

by 콩king 2022. 9. 26.

DI

 

기존방식

 

IoC (Inversion of Control 역행제어)

▶ IoC(제어권 역전)이란, 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미한다

>> 컴포넌트 의존관계 결정, 설정 및 생명주기를 해결하기 위한 디자인 패턴

▶IoC 분류

>> IoC : Inversion of Control

>> DI : Dependency Injection

>> DL : Dependency Lookup

 

IoC 컨테이너

▶ 스프링 프레임워크도 객체에 대한 생성 및 생명주기를 관리 할 수 있는 기능을 제공하고 있음. 즉 IoC 컨테이너 기능을 제공한다

▶ IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리한다

▶ POJO의 생성, 초기화, 서비스, 소명에 대한 권한을 가진다

▶ 개발자들이 직접 POJO 를 생성 할 수 있지만 컨테이너에게 맡긴다

 

DL (Dependency Lookup )

▶ 의존성 검색

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

 

DI (Dependecy Injection)

▶ 의존성 주입

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

▶ 개발자들은 단지 빈 설정 파일에서 의존관계가 필요하다는 정보를 추가하면 된다

▶ 객체 레퍼런스를 컨테이너로부터 주입 받아서, 실행 시에 동적으로 의존관계가 생성된다

 

DI 장점

▶ 코드가 단순해진다

▶ 컴포넌트 간의 결합도가 제거된다

 

관련 용어

▶ Bean

>> 스프링이 IoC 방식으로 관리하는 객체라는 뜻

>> 스프링이 직접 생성과 제어를 담당하는 개체를 Bean 이라고 부름

▶ BeanFactory

>> 스프링의 IoC를 담당하는 핵심 컨테이너를 가리킴

>> Bean을 등록, 생성, 조회, 반환하는 기능을 담당함

>> 이 BeanFactory를 바로 사용하지 않고 이를 확장한 ApplicationContext를 주로 이용함

▶ Application Context

>> BeanFactory를 확장한 IoC 컨테이너

>> Bean을 등록하고 관리하는 기능은 BeanFactory와 동일하지만 스프링을 제공하는 각종 부가 서비스를 추가로 제공함

>> 스프링에서는 ApplicationContext를 BeanFactoy 보다 더 많이 사용함

 

빈 설정 방법

▶ xml 기반 설정 방식

>> 스프링 1.0

>> xml 파일에 <bean> 요소를 빈으로 정의한다

>> <constructor-arg><property> 요소로 의존성을 주입한다.

▶ Annotation 기반 설정 방식

>> 스프링 2.5

>> @Component 같은 어노테이션이 부여된 클래스를 탐색하여 DI 컨테이너에 빈을 등록한다

▶ Java 기반 설정 방식

>> 스프링 3.0

>> 자바 클래스에 @Configuration, 메소드에 @Bean 어노테이션을 사용해 빈을 정의한다

'Programming > Java + Spring' 카테고리의 다른 글

[Spring] 게시판 실습 / 준비 단계  (0) 2022.09.27
[Spring] DI 실습  (0) 2022.09.26
[Spring] 프레임워크  (0) 2022.09.26
[Java] 형변환  (0) 2022.07.17
[Java] 변수  (0) 2022.07.17

댓글