IT/Spring

Spring[5] - Dependency Injection

올빼밋. 2022. 6. 27. 21:01
728x90

<<<<<< 5. Dependency Injection >>>>>>

 

목차 : 1. DI개념, 2. 스프링 컨테이너의 이해와 사용

 

1. DI개념

DI(Dependency Injection)

DI의 개념

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

—> 의존성을 주입해주는 것

—> 의존성 : 다른 클래스의 다른 객체를 멤버 변수를 사용하거나 메소드 내에서 객체를 사용하는 것을 Dependency 관계 또는 사용한다라고 한다.

—> 사용하는 객체를 new라는 키워드로 생성해서 사용하는데, 이것을 자동으로 생성해서 주입을 해주는 것이 Dependency Injection이다.

—> 장점 : 자주 사용되는 객체의 경우, 사용할때마다 생성과 소멸은 오버헤드가 되는데 이것을 자동으로 해주게 되면 소스코드가 간결해주고 성능상으로 향상된다.

  • 개발자들은 단지 빈 설정파일에서 의존관계가 필요하다는 정보를 추가하면 됨 —> 선언적 방법
  • 객체 레퍼런스를 컨테이너로부터 주입 받아서, 실행 시에 동적으로 의존관계가 생성됨
  • 컨테이너가 흐름의 주체가 되어 애플리케이션 코드에 의존관계를 주입해주는 것
  • Di 장점 : 코드 단순, 컴포넌트 간의 결합도가 제거

 

DI의 유형

  1. Setter Injection - Setter 메서드를 이용한 의존성 삽입
  2. Constructor Injection - 생성자를 이용한 의존성 삽입
  3. Method Injection - 일반 메서드를 이용한 의존성 삽입

—> setter와 constructor Injection을 가장 자주 사용함

 

2. 스프링 컨테이너의 이해와 사용

Spring DI 컨테이너

Spring DI 컨테이너의 개념

Spring DI 컨테이너가 관리하는 객체를 빈(bean)이라고 하고, 이 빈(bean)들을 관리한다는 의미로 컨테이너를 빈 팩토리(Bean Factory)라고 부른다.

<interface> Application Context —>  <interface> Bean Factory

  • 객체의 생성과 객체 사이의 런타임(run-time)관계를 DI관점에서 볼때는 컨테이너를 Bean Factory라고 한다.
  • Bean Factory에 여러가지 컨테이너 기능을 추가하여 애플리케이션 컨텍스트(Application Context)라고 부름

 

Bean Factory와 Application Context

Bean Factory

  • Bean을 등록, 생성, 조회, 반환 관리함
  • 보통은 Bean Factory를 바로 사용하지 않고, 이를 확장한 Application Context를 사용함
  • getBean() 메서드가 정의되어 있음

Application Context

  • Bean을 등록, 생성, 조회, 반환 관리하는 기능은 Bean Factory와 같음
  • Spring의 각종 부가 서비스를 추가로 제공함
  • Spring이 제공하는 Application Context 구현 클래스가 여러 가지 종류가 있음

—> Bean Factory를 상속받아서 부가 서비스를 추가로 제공하는 것

 

Bean Factory와 Application Context의 전체적인 구조

728x90