처음부터 차근차근

Dependency Injection(의존성 주입) 본문

Framework/Spring

Dependency Injection(의존성 주입)

_soyoung 2021. 9. 15. 00:25
반응형
의존관계

 

A class에서 B class의 객체를 사용하고있으면,

A class는 B class의 객체가 없으면 안되고,

즉, 'A는 B에 의존하고 있다.' 라고 말할 수 있다.

 

 

<클래스에서 다른 객체를 이용하는 방법 2가지>

1. 클래스 안에서 객체 생성 ex) new BClass(), new CClass()

2. 외부에서 객체를 생성해서 {setter()나 construct()(=생성자)를 이용해서} 클래스 안에 넣어준다. 

여기서 2번을 의존성 주입 즉, DI라고 한다.

 

의존성 주입(DI)

 

의존성 주입은 Spring framework의 가장 대표적인 특징이다.

의존성 주입이란, 외부에서 객체를 만들어서 class에 주입하는 방식이다.

Dependency(의존) + Injection(주입) = DependencyInjection(의존성 주입)

보통 앞글자를 따서 DI라 부른다.

 

의존성 주입의 예

외부에서 객체를 만들때는 주로 xml파일을 사용한다.

xml파일에서 객체를 만들고 main함수에서 xml파일을 찾아서 거기서 만들어놓은 객체를 연결해서 사용하는 방식이다.

그리고 객체를 주입하는 방법은 2가지가 있다.

하나는 setter을 사용하는 방법이고, 하나는 생성자를 사용하는 방법이다.

 

1. setter 사용해서 의존성 주입

1. 이름은 calculator로 하고, com.mypac.first패키지 안에 있는 Calculator클래스를 객체로 만들겠다. 라는 뜻

2. 이름은 myCalculator로 하고, com.mypac.first.MyCalculator클래스의 객체를 만들겠다. 라는 뜻

property는 setter와 같은 기능을 한다.

ref는 '참조한다'라는 뜻으로, 위에 만들어놓은 calculator객체를 참조한다.

name은 꼭 myCalculator가 가지고 있는 변수로 해줘야 한다.

 

--> MyCalculator의 calculator에는 위에서 만든 calculator객체를 넣고(ref),

number1에는 4를 넣고,

number2에는 2를 넣어서

myCalculator이라는 이름의 객체를 만들었다.

 

그래서 이렇게 만든 객체는

위와 같은 코드를 사용하여 외부에서 주입하여 사용할 수 있다.

 

주의할 점!!

객체를 xml파일의 property사용해서 만들 때는 꼭 객체 만드는 클래스에 setter가 있어야한다.

2. 생성자 사용해서 사용해서 의존성 주입

property를 constructor-arg로 바꿔사용하면 된다.

 

 

 

+ List Bean객체 만드는 법

+ 자바파일에서 의존주입하는 방법

의존성 주입을 왜 쓸까?

 

의존성 주입을 왜 쓸까?

굳이 이렇게 복잡하게 의존성 주입을 사용하지 않아도 setter에서 그냥 new 클래스명(); 해서 객체를 생성하면 된다.

아니면 그냥 main함수에서 setter파라미터로 객체를 넘겨도 되고 방법은 많다.

 

spring에서는 왜 이런 방법을 굳이 채택해서 사용할까?

그 이유는 협업 개발에서 찾을 수 있다.

개발자마다 코드를 쓰는 방법이나 규칙이 다 다른데, 그래서 객체를 생성할 때도 생성하는 위치가 다 다를 수 있다.

어떤 사람은 main클래스에서, 어떤 사람은 다른 클래스에서 객체를 생성하게 되면 코드가 복잡해지고 난잡해진다.

하지만 의존성 주입을 사용하면 객체를 외부에서 주입하게 되어 객체 생성할 일이 없어지므로 코드가 복잡해 지는 일이 없어진다.

이러한 이유로 의존성 주입을 사용하고, 의존성 주입을 사용하면 여러 개발자가 협업을 해도 코드에 통일성을 줄 수 있다. 

그리고 파일을 수정하기가 쉬워진다.

예를들어 내용을 변경해야 한다고 가정했을 때 의존성 주입을 사용하지 않으면 이 파일 저 파일의 코드들을 다 변경해야하는데,

의존성 주입을 사용하면 편하게 xml파일 하나만 수정하여 내용을 변경할 수 있다.

 

 

 

출처 : https://www.youtube.com/watch?v=bZjUUJM_ZqA&list=PLPvokKzUkaLeiLUDKpqRdP8jtLU8lLKgR&index=3 변형 및 요약

반응형
Comments