Spring/+ α

[스프링 이것저것] 의존성 주입 (DI) 개념 & 방법

y-seo 2023. 5. 7. 04:21

 의존성 주입

  • 의존성 주입 = Dependency Injection = DI
  • 프로그램 디자인이 결합도를 느슨하게 되도록하고 의존관계 역전 원칙과 단일 책임 원칙을 따르도록 클라이언트의 생성에 대한 의존성을 클라이언트의 행위로 분리하는 것 by 위키피디아
  • 의존 관계란?
    • A가 B를 의존한다 = 의존대상 B가 변하면 그것이 A에 영향을 미친다
    • 다양하게 의존 관계를 맺으려면 인터페이스로 추상화 해야 함 ⇒ 실제 구현 클래스와의 관계는 느슨해지고 결합도가 낮아짐
  • 의존 관계 주입이란?
    • 의존관계를 외부에서 결정하고 주입하는 것
    • 클래스 변수를 결정하는 방법 = DI를 구현하는 방법
    • 런타인 시점의 의존관계를 외부에서 주입하여 DI 구현 완성
  • DI 장점
    • 의존성/종속성 ↓ : 변화가 있더라도 수정할 일이 적다
    • 재사용성 ↑ : 다른 클래스에서도 사용 가능
    • 테스트 용이
    • 유연한 코드 by 낮은 결합도
  • 참고 : 의존관계 주입(Dependency Injection) 쉽게 이해하기 (techcourse.co.kr)

 

DI 방법

  1. Field(필드) 주입
  2. Setter(수정자) 주입
  3. Constructor(생성자) 주입

 Field 주입

  • 멤버 객체에 @Autowired 추가
  • Spring 런타임시 ⇒ 타입이 같은 객체를 검색해 사용 or 없으면 생성 후 등록
  • 코드가 간결하나 외부에서 변경이 어려움
  • 프레임 워크에 의존적
  • 객체지향적으로 좋지 않음

 Setter 주입

  • setter 메소드에 @Autowired 선언 ⇒ setter 메소드의 파라미터에 해당하는 객체를 빈에서 불러옴
  • 변경 용이

 Constructor 주입

  • 빈이 만들어지는 시점에 모든 의존 관계를 빈에서 가져와야 함
  • 스프링 프레임워크에서 권장
    • 순환 참조 방지
    • 변경의 가능성 배제, 불변성 보장
    • 테스트 용이