Everything has an expiration date
03 [DI(Dependency Injection)] 본문
■■■ DI(Dependency Injection) ■■■
Dependency 는 의존 객체를 말한다.
Injection 은 주입을 의미한다.
객체 A 가 사용되기 위해 B 객체가 반드시 필요하다고 가정하면,
A 객체 입장에서 B 객체는 의존 객체가 된다.
클래스 A 가 다음과 같은 상황이고,
public class A
{
private B b;
public A()
{
b = new B();
}
}
『A a = new A();』 라는 구문을 통해 A 객체 생성을 하는 과정이 있다면,
의존 객체인 B 객체 생성 과정은 여기에 없는 상황이 된다.
A 객체 내부 생성자에 의존 객체인 B 를 생성하는 과정이 포함되어 있는 것이다.
이는 의존성이 강한 결합에 속하기 때문에
사용자가 B 객체를 바꾸고 싶어도 A 클래스의 내부 소스코드를 바꾸지 않고서는
다른 객체로 바꿀 수 없는 상황이 된다.
게임기에 빗대어 예를 들자면, 게임 칩이 내장된 게임기 모델과 같다고 할 수 있다.
이를... 다음과 같이 수정한다면,
B b = new B();
A a = new A(b);
의존 객체인 B 객체에 대한 생성 권한이 사용자에게 주어진다.
B 객체를 별도로 생성하고 A 객체에 이를 전달해 주는 것이다.
필요할 경우 B 객체 대신 다른 객체로 변경하는 것도 가능하다.
이 때, B 객체를 의존 객체(Dependency) 라고 하고
A 객체에 전달해 주는 액션을 주입(Injection)이라고 한다.
게임기로 말하자면 게임팩 교체가 가능한 게임기 모델과 같다고 할 수 있다.
스프링은 환경 설정 파일인 XML 파일을 통해서
소스 코드 변경 없이 객체 생성과
객체 간의 의존 관계(DI)를 설정, 조정, 변경할 수 있다.
※ DI 설정은 ① 생성자를 이용하는 방법과, ② setter 를 이용하는 방법
크게 두 가지가 있다.
일반적으로 setter 메소드를 이용한 DI 방법을 사용하게 된다.
스프링에서는 XML 환경 설정 파일에서 객체 생성 및 DI 설정을 한다.
cf) Annotation 을 활용하는 방법
※ IoC(Inversion of Control)
DI 패턴을 적용하게 되면
객체 생성 과정 및 의존성 주입은 일반적인 객체 생성과는 다른 방식으로 진행된다.
작은 부품 객체인 C 를 만들고,
그 부품 객체인 C 를 중간 부품 객체인 B 에 주입(Injection)하고,
중간 부품 객체인 B(C가 탑재된 B)를 이용해서
최종 완제품인 A 객체에 주입(Injection)하게 되면
객체 조립이 완성되는 구조... 이 과정... 또는 이에 대한 관리...
를 모두 종합하여 IoC 라고 표현한다.
이 행위를 하는 주체 즉, IoC Container 를 대상으로 IoC 라고 표현하기도 하고,
이 행위가 일어나는 장소를 IoC 라고 표현하기도 한다.
'[Framework] Concept' 카테고리의 다른 글
04 [AOP(Aspect Oriented Programming)] (0) | 2024.01.09 |
---|---|
02 [Spring Framework 환경설정] (0) | 2024.01.09 |
01 [Spring Framework 이해하기] (2) | 2024.01.04 |