Inversion of Control in Spring Framework
작성자 : 김문규
최초 작성일 : 2008. 7.10
IoC는 Spring Framework의 장점을 꼽으라면 가장 먼저 언급되는 개념입니다. 한국어로 변역하면 '제어의 역행'! 한국어가 더 어려워 보입니다. 비슷한 말로 Dependency Injection(DI)라는 말도 있습니다. 한국말로는 의존성 삽입! 아하~ 조금 이해가 되시나요?
간단하게 이해하기 쉽게 같이 알아보지요.
1. 개념
객체 간의 의존관계를 객체 내부에 선언 또는 정의하지 않고, 외부의 조립기를 이용하여 의존 관계를 설명한다는 것
2. 예제
객체간의 연관성을 선언하는 3가지 방법을 보고, 문제점이 어떻게 IoC(DI)를 이용해서 해결되는 지 알아보지요.
1) 직접 선언하는 방법
private ArticleDao articleDao = new MysqlArticleDao();
...
}
- 쉽습니다.
- 하지만, 이를 테스트하기 위해서는 MySqlArticleDao가 정상적으로 동작해야 합니다. 어렵습니다.
- 또한, OracleArticleDao를 사용하기로 바뀌었다면 코드를 고쳐야 하지요~ 물론 컴파일도 다시요. 귀찮습니다.
2) Factory 패턴, JNDI를 이용하는 방법
private ArticleDao articleDao = ArticleDaoFactory.create();
...
}
- 조금 나아졌나요? 최소한 Oracle로 바뀌어도 코드 수정은 안해도 되겠네요~ ^^
- 근데 테스트 측면에서는 전혀! 나아진게 없어 보입니다. 올바르게 동작하는 Factory와 JNDI에 등록된 객체가 필요합니다.
3) 외부 조립자를 이용하는 방법
private ArticleDao articleDao;
public WriteArticleServiceImpl(ArticleDao articleDao) {
this.articleDao = articleDao;
}
...
}
외부 설정 파일 (applicationContext.xml)
<bean name="writeArticleService" class="com.sec.service.WriteArticleServiceImpl">
<constructor-arg><ref-bean="articleDao"></constructor-arg>
</bean>
<bean name="articleDao" class="com.sec.dao.OracleArticleDao" />
- 외부 설정(applicationContext.xml)에서 객체간의 의존성을 설명하고 있다는 감이 오시지요? 바로 이겁니다. 외부에서 객체 의존성을 정의하고 있는 것이지요. 책에서는 조립한다고 설명하더군요. (Nice!)
- 여기서는 생성자를 이용한 방법을 사용하지만 setter를 이용하는 방법도 있습니다. 요건 나중에 차차..
- 이제 위에서 말한 2가지 문제점이 다 해결되어 보이지요? 아하~ 굳입니다. ^^
3. 참조
1) 웹 개발자를 위한 스프링 2.5 프로그래밍
2) http://martinfowler.com/articles/injection.html
- 다음은 IoC 설명의 정석으로 불려지는 Martin Fowler의 글입니다. 시간이 되시면 읽어보세요. 위의 설명이 좀 더 잘 이해되실 겁니다.
'개발 노트' 카테고리의 다른 글
| Javascript Object Oriented Programming (1) | 2008/07/14 |
|---|---|
| [Spring Framework ③] Aspect Oriented Programming (AOP) (2) | 2008/07/10 |
| [Spring Framework ②] Inversion of Control (2) | 2008/07/10 |
| CPPTooltip 사용 예제 (0) | 2008/07/01 |
| X11에서 Pointer를 이동하는 예제 (0) | 2008/07/01 |
| 초보 Java 웹 개발자들을 위한 학습 로드맵 (0) | 2008/06/30 |



이올린에 북마크하기

IoC는 의존성관계보다, 컨테이너의 객체 관리에 대한것이 포커스 아닌가요?
네, IoC의 의미는 프로그램에서 객체 구현을 제어하지 않고 설정으로 프로그램에서 이를 제어한다는 것입니다.
다시 말하면, 외부 설정으로 추상화 객체에 구현 객체를 매핑해주는 것이지요.
그런데, 이 말이 곧 의존성을 삽입한다는 의미와 연결되는 것이라고 생각되요. 추상화 객체는 구현 객체에 의존하고 있고 이를 외부 설정으로 연결(삽입)하고 있는 것이지요.
그래서 IoC를 설명하면서 DI가 같이 언급되고 있다고 생각되는데요. 생각이 다르신가요?