티스토리 뷰

1. DI (Dependency Injection) 란?

 - OOP 프로그램에서, 다양한 디자인패턴(효율적인 프로그래밍 방법론) 중 한가지. 

 - 핵심적인 기능을 객체로 구현하여, 각 객체에 주입하는 방식.

 

1-1) DI를 이용하는 이유

 - 객체 지향 프로그램에서는 각 객체가, 모든 프로그램에 구속되어 유지 보수가 어려울 경우를 배제하기 위한 방법으로 프로그램을 구성한다.

 - 즉, 인터페이스를 이용하거나 객체를 독립화시켜, 프로그램의 확장을 용이하게 한다.

 

사진 1) 장난감 예시로 DI 이해하기

 

 - 위의 장남감들은, 모두 배터리에 '의존'하고 있다, 이렇게, 배터리라는 핵심적인 기능을 만들어서, 모든 장난감이 움직일 수 있게 '주입'하는 것을 의존 주입(DI)이라고 한다.

 - 효과적인 DI 방법은 배터리 분리형 처럼, 객체를 분리하여 개발하는게 유연성있고 좋은 프로그램이라고 할 수 있다.

 

예제 1) 코드로 DI 이해하기

 - 배터리 일체형에서는, getter ,setter 메서드가 없기 때문에, 생성과 동시에 battery가 설정된 이후, 해당 변수를 변경할 수 없다.

 - 배터리 분리형에서는 생성시에 battery를 설정할 수 있으며, 기본적으로 setter 메서드가 있기 때문에, 배터리 변수를 언제든지 변경할 수 있다. 

 - 일반적으로 생성과 동시에 객체에 값을 넣고, setter 메서드를 통해 언제든지 수정할 수 있게 하는 것을 선호한다.

 

즉, 만들어진 객체를 외부에서 따로 주입하여 사용하는 것을 DI라고 한다. (Java OOP의 다형성 개념과 비슷하다)

 

2. 스프링 DI 설정 방법

스프링 설정파일 (applicationContext.xml) 을 GenericApplicationContext라는 클래스를 이용하여

스프링 설정파일로 부터 Spring Container를 만들수 있음. Spring Container에는 많은 Bean 객체들이 존재함. 이 Bean 객체들은 스프링 설정파일에 bean태그를 이용하여 명시를 하고, 명시된 bean태그가 GenericApplicationContext라는 클래스를 통해 Spring Container안에 객체로 생성됨. 이렇게 생성이 된 객체를, 사용하고 싶을 때, getBean()를 통해 가져다 사용하면 됨. (이미 컨테이너에 생성되어 있기 때문에 new라는 키워드를 통해 객체를 생성하지 않아도 됨).

 

 - 여기서 DI형태는 컨테이너에 만들어진 bean 객체중에 객체끼리 의존해 있는것을 말한다.

 

댓글