코딩 하는 가든

spring - DI의 개념, 그리고 spring에서의 DI와 IoC (2) 본문

Spring (boot)

spring - DI의 개념, 그리고 spring에서의 DI와 IoC (2)

가든리 2020. 7. 26. 01:30

이전 글에서 DI의 개념과 Spring에서의 DI가 어떻게 이루어지는지 살펴보았습니다. 

 

대략 아래와 같은 구조로 이루어 진 객체들이 어떻게 의존성 주입이 일어나는지 코드를 통해 알아보겠습니다.

 

먼저 객체가 IoC컨테이너에 의해 관리되려면 스프링 Bean 등록을 해야 합니다.

 

Bean으로 등록하는 방법은 xml 설정과 자바 코드로 등록하는 방법이 있는데 여기서는 자바 코드로 등록을 해보겠습니다.

 

다음과 같은 Battery 클래스가 있습니다. 이 Battery 클래스를 스프링 빈으로 등록해보겠습니다.

(간단한 예시여서 따로 게터, 세터로 관리하지 않았습니다.)

스프링 Bean으로 등록을 하기 위해선 먼저 @Configuration 어노테이션을 가진 클래스를 하나 생성합니다.

그리고 @Bean 어노테이션을 가진 Battery를 돌려주는 메서드를 만들면 됩니다.

이렇게 하면 Battery가 IoC컨테이너에 등록할 준비가 되었습니다.

 

그러면 이제 Bean을 IoC컨테이너에 등록하고 사용해 보겠습니다.

 

Toy가 동작하기 위해선 Battery가 필요합니다.

 

원래였다면 코드는 다음과 같은 구조로 될 것입니다.

Battery battery = new Battery("A 건전지");
Toy toy = new Toy();
toy.battery = battery

하지만 IoC에 의해서 배터리를 주입받게 되면 다음과 같이 됩니다.

눈여겨볼 부분은 다음의 두 줄입니다.

AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class);

- 만들어 두었던 Config 클래스를 기반으로 컨테이너를 구성한다.

 

Battery battery = applicationContext.getBean(Battery.class);

- 컨테이너에서 Battery 빈을 가져온다.

 

이렇게 하면 다음과 같이 나오는 것을 볼 수 있습니다.

Battery는 스프링 빈에 등록했던 (Config class에서) A 건전지가 나오게 됩니다.

 

이 상태에서 Config class를 통해 빈으로 등록되어 있던 건전지를 B 건전지로 교체해 보겠습니다.

보이는것과 같이 메인 소스 코드의 수정 없이 IoC컨테이너 설정을 바꿔주는 것 만으로 건전지를 교체 할 수 있게 되었습니다.

 

이렇게 IoC컨테이너를 통해 의존성 주입을 관리 하는것이 스프링의 DI 입니다.