1. DI(Dependency Injection)
- 의존성 주입
- 한 Object가 다른 Object를 사용할 때 의존성이 있다고 함
- Runtime시 의존 관계를 맺는 대상을 외부에서 결정하고 주입해 주는 것임
- Spring Framework는 DI기능을 지원해주는 Framework임
2. 의존관계(Dependency)?
- 의존대상 B가 변하면, 그것이 A에 영향을 미침
3. DI 장점
- 의존성이 줄어듬
- 의존한다는 것은 그 의존대상의 변화에 취약하다는 의미임(대상이 변화하였을 때, 이에 맞게 수정해야함)
- DI로 구현하게 되었을 때, 주입받는 대상이 변하더라도 그 구현 자체를 수정할 일이 없거나 줄어들게됨을 의미
- 재사용성이 높은 코드가 됨
- 기존에 BurgerChef 내부에서만 사용되었던 BurgerRecipe을 별도로 구분하여 구현하면, 다른 클래스에서 재사용할 수가 있음
- 테스트하기 좋은 코드가 됨
- BurgerRecipe의 테스트를 BurgerChef 테스트와 분리하여 진행할 수 있음
- 가독성이 높아짐
- BurgerRecipe의 기능들을 별도로 분리하게 되어 자연스레 가독성이 높아짐
- 의존성의 주입을 Interface기반으로 설계하면, 코드가 유연해지는데 이를 **“Loose Coupling[느슨한 결합도]”**라 불리며, *변경에도 유연해 “결합도가 낮은 Object끼리”*는 부품을 쉽게 갈아끼울 수 있다는 장점이 있음
4. DI 주입방법
- 생성자 주입 방법 (Constructor-based Dependency Injection )
- 생성자를 이용해 의존 관계를 주입한 것
- 주입받은 객체가 변하지 않거나, 반드시 객체의 주입이 필요한 경우에 사용
- 수정자 주입 방법 (Setter-based Dependency Injection )
- Object의 Setter를 이용해 의존 관계를 주입하는 것