개발 일기
DI(Dependency Injection) 의존성 주입에 대해 알아보자! 본문
안녕하세요.
오늘은 스프링에서의 의존성 주입(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(의존성 주입)과 관련된 내용을 찾아 정리해보았습니다.
감사합니다.
'Spring' 카테고리의 다른 글
springMVC설정 순서 정리! (feat. application-config.xml와 mvc-config.xml 비교) (0) | 2021.10.06 |
---|---|
web.xml 이란?? (feat. 기본 설정 해보기) (0) | 2021.10.04 |
스프링 프레임워크(Spring Framework)의 주요 기능 및 특징 (0) | 2021.09.28 |
모델 2방식과 Spring MVC란? (0) | 2021.09.02 |
Spring 설치하는 방법 (feat. Spring의 시작!) (0) | 2021.09.01 |