Dependency Injection (DI) 종속성 주입
종속성 주입이라는 표현이 어려워 유튜브 강의를 찾아보다가 뉴렉쳐 채널에서 강의를 보게 되었다.
'~의 dependency(종속성) OO' 같이 표현하지만, 이 Dependency 라는 용어는 '부품'이라는 용어로 대체해 읽어보면 좀 더 직관적으로 이해할 수 있다.
1. Composition has a 관계 (일체형)
A의 생성자 안에서 B 객체를 직접 생성하여 B를 갖는 방법
Class A
{
private B b;
public A() {
b = new B(); //B는 A의 부품. B를 dependency 라고 함(의존성)
}
}
A a = new A();
2. Association has a 관계 (조립형)
생성자 안에서 B 객체를 직접 생성하지 않고, 외부에서 생성한 B를 받아 가져오는 방법
결합력 낮아져 부품을 쉽게 갈아낄 수 있다. (느슨한 결합력)
그러므로 자주 업데이트해야하는 기업 입장에서는 선호하는 방법이다.
class A
{
private B b;
public A() {
//b = new B(); 직접생성 X
}
//외부에서 B 생성 받아 가짐
public void setB(B b) {
this.b = b;
}
}
2.1 조립형의 두 가지 DI 방법
1) Setter Injection
세터 함수를 통해 주입받는 방법
B b = new B();
A a = new A();
a.setB(b);
2) Construction Injection
생성자를 통해 주입받는 방법
B b = new B();
A a = new A(b);
EX01. Dependency Injection 사용해보기
1) Setter Injection
public class Program {
public staic void main(String[] args) {
Exam exam = new NewlecExam();
ExamConsole console = new GridExamConsole();
console.setExam(exam);
console.print();
}
}
2) Construction Injection
public class Program {
public staic void main(String[] args) {
Exam exam = new NewlecExam();
//두 개의 DI
//ExamConsole console = new InlineExamConsole(exam); //1번: Inline 이용
ExamConsole console = new GridExamConsole(exam); //2번: Grid 이용
console.print();
}
}
위 상태대로라면, 코드를 바꿔야만 Inline으로 출력할지, Grid로 출력할지를 결정할 수 있다.
Spring을 사용하면 코드를 수정하지 않고도 필요에 따라 1번의 Inline 혹은 2번의 Grid를 사용할 수 있다.
이 때문에 Spring이 DI를 쉽게 할 수 있도록 도와준다는 것이다.
'BackEnd > Spring' 카테고리의 다른 글
[Spring] 이클립스에 Maven Repository 라이브러리 가져오기 (0) | 2021.08.28 |
---|---|
[Spring] Application Context 작성하기 (0) | 2021.08.28 |
[Spring] Spring DI 지시서 작성하기 (Spring Bean Configuration) (0) | 2021.08.26 |
[Spring] IoC 컨테이너 (0) | 2021.08.26 |
[Spring] Spring 설치 및 기본설정 (0) | 2021.08.24 |
댓글