Denpendency Injection & Dependency Lookup
- Dependency Injection
Spring IoC의 동작원리는 주로 DI(Dependency Injection)이다. Spring 공식 Doc보면, IoC를 DI라고 표현하기도 한다.
Dependency Injection의 정의는 다음과 같다.
Dependency Injection :
program run time 시에 의존관계를 맺는 대상인 dependent object 와 , 그것을 사용하는 주체인 client object를 연결시켜주는 작업
DI는 정리하면 다음과 같은 3 조건을 충족시키는 작업을 말한다.
- class model(class diagram)에는 의존관계가 들어나지 않음 , 즉 client가 Interface에 의존하고 있어야 한다.
- run time시 의존관계는 container와 같은 다른 주체가 결정한다.
- 의존관계는 사용할 dependent object의 reference를 외부에서 주입해줌으로서, 만들어진다.
- Dependency LookUp
Spring이 제공하는 IoC방법은 DI만 존재하는 것이 아니다. Dependency Lookup(의존관계 검색) 도 Spring 에 제공하는 IoC 방법 중에 하나이다.
Depedency Lookup(DL)은 DI와 다르게, 스스로 의존관계를 찾는다 . client는 자신이 사용할 객체를 결정하거나 , 생성하진 않지만 (이는 DI Container에 의해 수행됨) 생성자나 method를 통해 생성된 객체를 주입받는게 아니라, 직접 DI Container에게 달라고 요청하는 것이다.
두번쨰로 DL 은 호출 주체가 Spring bean 일 필요는 없지만, DI의 경우 Container 에서 object 주입을 해주기 때문에 호출 주제도 Spring Bean이여야 한다는 차이점이 있다.
(당연히 , DI를 원하는 object는 당연히 spring bean 으로 등록되어 있어야 한다.)
이전에 살펴보았던 application context(=DI Container,IoC container,Bean Factory의 확장형) 에서 getBean() method가 Dependency LookUp에 사용되는 method이다.
1 | ApplicationContext applicationContext = new AnnotationConfigApplicationContext(DaoFactory.class); |