Cute Running Puppy
본문 바로가기
개발일기/Java

의존성 주입(Dependency Injection, DI)

by 징구짱 2023. 5. 31.
728x90

Dependency(의존성)란?

“A가 B를 의존한다.”
의존대상 B가 변하면, 그것이 A에 영향을 미친다.

즉, B의 기능이 추가 또는 변경되거나 형식이 바뀌면 그 영향이 A에 미친다.

의존성 주입은 의존 관계를 객체의 외부에서 결정하고, 필요한 객체를 주입하여 사용하는 방법이다.

 

 

DI(의존성 주입) 세 가지 방식

  1. 생성자 주입(Constructor Injection)
    객체를 생성할 때 의존하는 객체를 생성자의 매개변수로 전달하여 주입한다.
  2. 설정 주입(Setter Injection)
    의존하는 객체를 설정 메서드(setter)를 통해 주입한다.
  3. 인터페이스 주입(Interface Injection)
    의존하는 객체를 특정 인터페이스를 구현한 객체로 주입한다.

 

DI(의존성 주입)의 장점

  1. 느슨한 결합(Loose Coupling)
    의존 객체와 의존되는 객체 사이의 결합도를 낮출 수 있다. 이는 객체 간의 상호 의존성을 줄여 변경에 대한 영향을 최소화하고, 모듈성을 높이며, 코드의 유연성을 개선한다.
  2. 테스트 용이성
    의존 객체를 Mock 객체로 대체하여 의존 객체의 실제 동작에 의존하지 않고 테스트를 진행할 수 있도록 도와준다. 이를 통해 의존 객체의 동작을 제어하고 모의 객체를 주입하여 예상된 동작을 시뮬레이션할 수 있다.
  3. 코드의 재사용성
    의존하는 객체를 모듈화하고 추상화하여 중복 코드의 제거와 재사용을 통해 코드의 양을 줄일 수 있다. 해당 객체를 변경하거나 대체할 때 다른 객체들에게 영향을 덜 주며, 변경 작업이 더욱 안전하고 쉽다.
  4. 확장성
    새로운 의존 객체를 추가하거나 기존의 의존 객체를 변경하는 작업이 간단해진다. 새로운 객체를 주입함으로써 애플리케이션의 기능을 확장하고, 다양한 구현을 대체하거나 조합하여 유연한 시스템을 구축할 수 있다.
  5. 가독성과 유지 보수성
    의존 관계가 외부에서 명시되므로 코드를 읽거나 이해하기 쉬워진다. 또한, 의존성을 쉽게 변경하거나 대체할 수 있으므로, 유지 보수 작업이 간편해진다.
728x90