Dependency Injection & Dependency Lookup

2021-07-28 02:14:42
#spring#토비의 spring
  • Dependency Injection Spring IoC의 동작원리는 주로 DI(Dependency Injection)이다. Spring 공식 Doc보면, IoC를 DI라고 표현하기도 한다.

Dependency Injection의 정의는 다음과 같다.

DI는 정리하면 다음과 같은 3 조건을 충족시키는 작업을 말한다.

  1. class model(class diagram)에는 의존관계가 들어나지 않음 , 즉 client가 Interface에 의존하고 있어야 한다.
  2. run time시 의존관계는 container와 같은 다른 주체가 결정한다.
  3. 의존관계는 사용할 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이다.

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(DaoFactory.class);
// Dependency Lookup : getBean() , 스스로 DI Container에게 객체를 달라고 요청한다. 
UserDao spring_dao1 = applicationContext.getBean("userDao", UserDao.class);
프로필 이미지
@chani
바둑, 스타크래프트 등 고전 게임을 좋아하는 내향인 개발자입니다

댓글