Spring Boot 문법

[Injection] 의존 주입이란?

여우비오냐 2024. 4. 4. 20:12

[1. 왜 의존 주입이 필요할까?]

 

 

 

 

 

 

 

 

 

오른쪽과 같이 A 서비스에서

B2라는 새로운 클래스로 DAO 소스 코드가 새로 만들어진다면?

 

오른쪽 소스코드에

private B1 b1;
///
b1 = new B1();

위 부분을 다 수정해야 된다.

 

딱 봐도 클래스간에 의존성이 너무 높다!

그래서 나온 방법 2가지!

 

1. DAO를 묶을 interface B를 만들고 그것을 A에서 사용하고, B1, B2에서 B를 구현 (추상화)

2. A에서 interface B에 대한 의존성을 외부에서 주자 (의존 주입)

 

 

[2. 의존 주입의 종류]

Setter Injection

 

Construct Injection

 

 

Spring 에서는 위와 같은 과정을 개발자가 아닌 Spring이 대신 진행해준다.

쉽게 비유하면 

“ 내가 만든 클래스에서 다른 객체의 호출을 통해 메소드를 제공하는데 그 객체를 어디서 받는지, 어디서 주는지는 모르겠지만 Spring에 등록해두면 알아서 Spring이 연결해주겠지~”

 

이것을 IoC (Inversion of Control) 라고 함

 

[2.  IoC (Inversion of Control) ]

2가지의 의미로 해석 할 수 있다.

  1. 객체의 생성, 관리, 주기 같은 것을 개발자가 아닌 Spring 이 직접 진행함

       즉, 인스턴스의 관리 권한의 역전

 

   2.  객체의 생성과 의존성 주입을 역으로 한다(Inversion).

C객체 생성 -> B 주입 -> B 객체 생성 -> A 주입 -> A 객체 생성