본문 바로가기

Programming/Java&Spring

Spring IoC/DI

1. IoC(Inversion of Control)이란?


 프로그램의 제어 흐름 구조가 바뀌는 것.

  - 실행적인 측면 

     개발자가 객체의 생성과 제거를 제어

  - 객체간의 관계적인 측면

     애플리케이션은 여러 비지니스 로직을 수행하기 위해 둘 이상의 객체를 이용한다. 즉, 각 객체는 서로 의존적으로

      객체참조를 통해서 비지니스 로직을 처리한다.

     IoC는 객체가 필요로하는 객체를 내부에서 생성하지 않고 외부에서 주입(Inject)을 받아서 사용하는 것을 말한다.

2. DI(Dependency Injection)이란?


 모듈간의 의존성을 모듈의 외부(컨테이너)에서 주입시켜 주는 기능으로 Inversion of Control의 한 종류이다.

IoC 분류

DL(Dependency Lookup) : 저장소에 저장되어 있는 Bean에 접근하기 위해 컨테이너에서 제공하는 API를 이용하여 사용하고자 하는 Bean을 Lookup하는 것을 말한다.

DI(Dependency Injection) : 각 클래스 사이의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동적으로 연결해주는 것을 말한다. 개발자들은 빈 설정 파일에 의존관계가 필요하다는 정보를 추가하면 된다.

1. Constructor Injection : 생성자를 이용하여 의존관계를 연결

2. Setter Injection : setter 메소드를 이용하는 의존관계를 연결

3. Method Injection : Setter / Constructor Injection이 가지고 있는 한계점을 극복하기 위하여 Spring에서 지원하고 있는 DI의 한 종류

 

3. IoC 용어


 - bean : Bean을 객체화하고 의존성을 주입하는 등의 관리를 위한 정보를 담고 있다.

   * 자바빈 - EJB의 빈과 유사한 오브젝트 단위의 어플리케이션 컴포넌트를 말한다.

   * 스프링빈 - 스프링 컨테이너가 생성과 관계설정, 사용 등을 제어해주는 오브젝트

name : id와 동반 선언시 해당 id의 별명(alias)으로 활용, name만 선언되면 id와 동일한 의미를 부여함
scope : singleton(default) - 설정파일 내 선언된 빈클래스의 인스턴스는 싱글톤으로 관리 및 제공.     
prototype : 빈클래스 DI요청시마다 신규 인스턴스화가 진행되고 제공
request : 동일한 HttpServletRequest 활용시에는 싱글톤으로 빈 클래스의 인스턴스가 관리 및 제공되지만,
HttpServletRequest가 상이한 경우 Prototype으로 빈 클래스를  인스턴스화 수행.
session : 동일한 HttpServletSession 활용시에는 싱글톤으로 빈 클래스의 인스턴스가 관리 및 제공되지만,
HttpServletSession이 달라지는 경우 Prototype으로 빈 클래스를  인스턴스화 수행.
autowire-constructor : 생성자에 선언된 파라메터의 타입과 일치하는 빈이 존재 시 해당 인스턴스를
생성자를 통해 주입.
byName : 설정파일에 vean 등록시 id 또는 name 속성값을 활용한 메서드 명명규칙으로
요구되는 빈의 인스턴스가 주입
* 명명규칙 : public void set + '주입받을 빈의 id 또는 name 속성값(문자열로)' (주입받을 타입){}       
byType : 설정파일에 빈 등록된 빈 클래스의 타입을 기준으로 메서드 대상 주입이 이루어짐.
* 명명규칙 : public void set + '상관없음' (주입받을 타입){} 

 - bean factory : 스프링의 IoC를 담당하는 핵심 컨테이너 

   빈을 등록/생성/조회/반환/관리한다. 보통 확장한 application context 이용

 - application context : bean factory를 확장한 IoC 컨테이너

   빈의 등록/생성/조회/반환/관리의 기능은 bean factory와 같지만, spring의 서비스를 추가로 제공, beanFactory 상속

 - Configuration Metadata : application context 혹은 bean factory가 IoC를 적용하기 위해 사용하는 메타정보

   Spring IoC container가 객체를 생성하고, 객체간의 의존성을 이어줄 수 있도록 필요한 정보 제공

 - Container : bean을 관리한다는 의미에서 beanfactory나 application context를 가리킨다.

    Spring IoC Container는 객체를 생성하고, 객체 간의 의존성을 이어주는 역할을 한다. 설정 메타데이터로 bean을 관리한다.

 

 

 


 

 

 

 

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

자바 변수명 규칙  (0) 2021.04.18
Spring AOP  (0) 2019.12.07