Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Everything has an expiration date

03 [DI(Dependency Injection)] 본문

[Framework] Concept

03 [DI(Dependency Injection)]

Jelly-fish 2024. 1. 9. 15:12

■■■ 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