Dependency Injection

bacccine·2022년 6월 8일
0

spring

목록 보기
4/10

DI(Dependency Injection)의 개념

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

개발자는 단지 Bean 설정 파일에서 의존관계가 필요하다는 정보를 추가하면 된다
객체 레퍼런스를 컨테이너로부터 주입받아 실행 시에 동적으로 의존관계가 생성된다
컨테이너가 흐름의 주체가 되어 애플리케이션 코드에 의존관계를 주입해주는 것

클라이언트 기술인 Angular에서 DI가 사용된다

DI의 장점

(1) 코드가 단순해진다 → 인터페이스만 선언되어 있으면 된다
(2) 컴포넌트 간 결합도가 제거된다, 객체 간 결합도를 낮춘다
(3) 한 곳에서 의존성 관리가 가능하다 → 클래스 내부에서 관리X

DI의 유형

(1) Setter Injection: 의존성을 받는 setter 메소드를 만들고 이를 통해 의존성 주입
(2) Constructor Injection: 필요한 의존성을 포함하는 클래스의 생성자를 만들고 이를 통해 의존성 주입
(3) Method Injection: 의존성을 입력받는 일반 메서드를 만들고 이를 통해 의존성 주입

Spring DI 컨테이너의 개념(=Bean Container,Application Context,Bean Factory)

Spring DI 컨테이너가 관리하는 객체를 Bean이라하고 이를 관리한다는 의미로 컨테이너를 Bean Factory라 한다
Bean을 로딩하여 관리할 뿐만 아니라 각 Bean들의 의존성을 관리

객체 생성과 객체 사이 런타임 관계를 DI 관점에서 볼 때는 컨테이너를 Bean Factory라 한다
Bean Factory에 여러 가지 컨테이너 기능을 추가해서 애플리케이션 컨텍스트라고 부름

Bean Factory란?

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

Application Context란?

Bean Factory와 마찬가지로 Bean을 생성,등록,조회,반환 관리한다
Spring의 각종 부가 서비스를 추가로 제공한다
Spring이 제공하는 Application Context 구현 클래스가 여러 종류가 있다

managed bean으로 만드는 방법

  1. spring-context.xml(스프링 설정파일)을 연다
  2. <beans>코드 내 <bean> 등록
    예시
<bean id="helloService" class="com.shinsegae_inc.hello.service.HelloService"/>

DAO를 컨테이너가 자동으로 삽입하게끔 하기

(1) setter
1. Service 파일에 다음과 같이 setter 메소드 작성

	//setter 이용
	public void setHelloDAO(HelloDAO dao) {
		this.helloDAO = dao;
	}
  1. spring-context.xml(스프링 설정파일)을 연다
  2. service <bean> 태그 내 <property> 삽입
	<bean id="helloService" class="com.shinsegae_inc.hello.service.HelloService">
		<property name="helloDAO" ref="helloDAO"></property>
	</bean>

(2) 생성자
1. Service 파일에 다음과 같이 생성자 생성

	//생성자 이용
	public HelloService(HelloDAO helloDAO) {
		this.helloDAO=helloDAO;
	}
  1. spring-context.xml(스프링 설정파일)을 연다
  2. service <bean> 태그 내 <constructor-arg> 삽입
	<bean id="helloService" class="com.shinsegae_inc.hello.service.HelloService">
		<constructor-arg ref="helloDAO"></constructor-arg>
	</bean>

의존성을 프로그램적으로 처리하지 않고 자동으로 주입해주는 방식(주입할 객체를 관리하는 컨테이너)의 장점

  1. 최적화된 성능을 보장
  2. 실수를 줄임

0개의 댓글