-
[Spring] DI 개념Developer/Spring 2013. 3. 13. 09:38스프링 프레임워크의 가장 큰 특징 중 하나가 DI를 지원한다는 것입니다.DI(Dependency Injection), 한글로 하면 ‘의존성 주입’ 이라는데.. 이름만 봐서는 뭘 해주는 녀석인지 이해가 가지 않습니다.DI(Dependency Injection) ?제가 생각할 때 DI를 사용하는 가장 큰 목적은 다음 한 줄로 나타낼 수 있을 것 같습니다.코드 의존성 제거 - 수정 사항이 있을 때 손이 덜 가게 하고 싶다.예를 들어 프로그램 시작 시, 동작하는 곳의 IP address를 알아야 한다고 가정합시다.IP address를 코드상에 기록한다면 설치할 때마다 매번 코드를 수정해야 하지요. 하드코딩된 IP address를 찾는 것도 일입니다.파일에 IP address를 적어두고 프로그램이 실행될 때 이걸 보고 시작하게 하면 어떨까요?코드 수정을 안해도 되고, 관리도 한 곳에서만 하면 되니까 좀 편해졌지요? 이런 편의성을 제공해준다는 것입니다.이런 예는 어떨까요?그림에서 ‘전사’는 만들어지기 전에 ‘무기’를 받아야 합니다. 무기에는 여러 종류가 있는데, 이 중 하나를 가지고 탄생하는 거죠.바꿔 말해서 ‘전사’가 만들어지려면, ‘무기’를 줘야 한다라고 할 수 있고, 이 말은 ‘전사’는 만들어지기 위해 ‘무기’에 의존하고 있다고 할 수 있습니다. (말장난처럼 보이지만 ‘의존성’이라는 단어를 끄집어 내려다 보니..)그리고 선택한 ‘무기’를 전사에게 ‘주입’시킵니다. 그냥 ‘준다’라고 보면 되겠네요.우리가 해줘야 할 부분오, 이제 우리가 귀찮아질 시간이군요. 위 그림을 구현한다고 생각해봅시다. 우리가 할 일은?1) 무기는 ‘창’을 준다는 것을 어딘가(?)에 명시해야 한다.2) 무기를 줘야 하는데, 전사가 받을 수 있는 방법(?)을 제공해야 한다.이렇게 정리해볼 수 있습니다. 빨간 글씨부분에 해당하는 정답은 무엇일까요?- 어딘가? 가 어디에요? -> XML 파일- 받을 수 있는 방법은? -> 생성자, setter ...네 그렇습니다. 이것만 해주면 됩니다.실제 XML 파일에는 아래와 같이 기술 해줘야겠군요. (생성자를 통해 주입받는 경우)[XML 파일]
<bean id="warrior" class="test.game.Warrior">
<constructor-arg ref="spear" />
</bean>
<bean id="spear" class="test.game.weapon.Spear">
<bean>
[전사 클래스]public class Warrior {
private Weapon weapon;
publiic Warrior(Weapon weapon) {
this.weapon = weapon;
}
...
}아니 그럼 뭐가 좋아졌지?바로 코드상에서 무기를 쥐어줄 필요가 없어졌습니다.XML 파일에 칼을 줄지, 활을 줄지, 창을 줄지만 적어주면 알아서 쥐어주니까요.이 말은 무기를 생성하고, 쥐어주는 코드까지 제거 되었다는 의미입니다.[출처] Spring DI(Dependency Injection) 이야기|작성자 열혈연구원
'Developer > Spring' 카테고리의 다른 글
[Spring] 의존성 주입 방법 (0) 2018.08.10 [Spring] 주요 모듈 구성 (0) 2013.02.28 [Spring] AOP (0) 2013.02.28 [ibatis] Transaction txAdvice 옵션 (0) 2012.11.02