일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 컨디션 변수
- 병행성 관련 오류
- 스케줄링
- DirectX 12
- I/O장치
- 렌더링 파이프라인
- 다이나믹 프로그래밍
- 멀티쓰레드
- OS
- 디자인패턴
- 쓰레드
- 락
- 멀티프로세서
- 운영체제
- codility
- 병행성
- 영속성
- 프로그래머스
- 그리디알고리즘
- directx
- DirectX12
- 백준
- 타입 객체
- 자료구조
- 파일시스템 구현
- 다이나믹프로그래밍
- 알고리즘
- 그리디 알고리즘
- 동적계획법
- Direct12
Archives
- Today
- Total
기록공간
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라고 한다.
반응형
'BackEnd > Spring' 카테고리의 다른 글
[Spring 에러] Log4j cannot be resolved to a type (0) | 2021.03.06 |
---|---|
[Spring 에러] cvc-complex-type.2.3 (0) | 2021.03.06 |
스프링의 특징과 의존성 주입 (0) | 2021.02.16 |
AOP(Aspect Oriented Programming) (0) | 2020.12.21 |
Spring Framework 이해 (0) | 2020.12.21 |
Comments