Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발 일기

DI(Dependency Injection) 의존성 주입에 대해 알아보자! 본문

Spring

DI(Dependency Injection) 의존성 주입에 대해 알아보자!

개발 일기 2021. 9. 29. 21:15

안녕하세요.

 

오늘은 스프링에서의 의존성 주입(DI)에 대해 정리해보겠습니다.

 

의존성 주입(Dependency Injection)이란?

 - 객체 간의 의존 관계를 객체 자신이 아닌 외부 조립기(컨테이너)를 통해 설정하는 개념(패턴)이다.

 

 - 객체 간의 의존 관계를 설정하는 방법

  1. 코드에서 직접 의존 클래스를 명시하는 방법

  2. Factory 패턴이나 JNDI 등을 사용해서 의존 클래스를 검색하는 방법

  3. 외부 조립기를 이용하는 방법

 * 스프링 프레임워크는 XML 설정 파일을 이용하여 손쉽게 객체간의 의존관계를 설정하는

   객체 조립기(컨테이너)를 제공한다.

 

 

1. 코드에서 직접 의존 클래스를 명시하는 방법

  - 의존하는 클래스가 변경되는 경우 코드를 변경한 뒤 재 컴파일 해야만 한다.

public class ArticleService{
	//코드에서 직접 의존 객체 명시
    private ArticleDao articleDao = new ArticleDaoImpl();
}

 

 

2. Factory 패턴이나 JNDI 등을 사용해서 의존 클래스를 검색하는 방법

  - Factory 클래스는 Dao 인터페이스를 구현한 클래스 중에서 어떤 클래스를 사용해야 할 지의 여부를 알아내기

    위해 외부 설정 파일을 사용할 수도 있다.

  - 올바르게 동작하는 Factory를 필요로 한다는 점에서 Factory와의 의존관계를 완전히 극복하지 못한다. 

public class ArticleService{
	//Factory로부터 의존 객체 검색
    private ArticleDao articleDao = ArticleDaoFactory.getDao();
}

 

 

3. 외부 조립기를 이용하는 방법

  - ArticleService 클래스의 코드는 ArticleDaoImpl을 생성하거나 검색하기 위한 코드가 포함되지 않는다.

  - 조립기 역할을 하는 Assembler가 ArticleDaoImpl 객체를 생성한 뒤 ArticleService 객체에 전달해 준다.

  - 조립기가 의존관계를 관리해 주는 방식을 DI(Dependency Injection) 패턴이라 한다.

  - DI 패턴을 적용할 경우 ArticleService 클래스는 의존하는 객체를 전달받기 위한 생성자나 setter 메소드를 제공할 뿐

    ArticleService에서 직접 의존하는 클래스를 찾지 않는다.

public class ArticleService{
    private ArticleDao articleDao;
    //생성자에서 의존하는 객체를 받음
    public ArticleService(ArticleDao articleDao){
    	this.articleDao = articleDao;
    }
    //setter 메소드에서 의존하는 객체를 받음
    public void setArticleDao(ArticleDao articleDao){
    	this.articleDao = articleDao;
    }
}

 

 

* Spring Framework는 XML 설정 파일을 통해 손쉽게 객체를 생성하고 객체간의 의존 관계를 설정하는 기능을

  제공하는 객체 조립기(컨테이너)를 제공한다.

<bean id="guestDao" class="com.itwill.guest.GuestDaoImplJDBC">
	<property name="dataSource" ref="dataSource"/>
</bean>

<bean id="guestService" class="com.itwill.guest.GuestServiceImpl">
	<property name="guestDao" ref="guestDao"/>
</bean>

 - guestService객체에 guestDao객체를 DI(의존성 주입)

 

 

오늘은 Spring의 DI(의존성 주입)과 관련된 내용을 찾아 정리해보았습니다.

감사합니다.

Comments