본문 바로가기

Back-end/Spring

[Spring] DI(Dependency Injection) 종류는 어떤 것이 있고, 이들의 차이는 무엇인가요?

DI(Dependency Injection: 의존성 주입)

 

외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴으로, 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시관계를 다이나믹하게 주입하여 유연성을 확보하고 결함도를 낮출 수 있게 해준다.

의존성이란 한 객체가 다른 객체를 사용할 때 의존성이 있다고 한다.

 

  • 두 객체 간의 관계라는 관심사의 분리
  • 두 객체 간의 결합도를 낮춤
  • 객체의 유연성을 높임
  • 테스트 작성을 용이하게 함

 

DI는 세가지 방법이 있습니다. 생성자 삽입, Setter를 이용한 메소드 매개 변수 삽입, 필드 주입이 있습니다.

 

  • 생성자 주입: 생성자 호출 시점딱 1번만 호출되는 것을 보장하며, 불변, 필수 의존관계에 사용
  • Setter 주입: 선택, 변경 가능성이 있는 의존관계에 사용되며 스프링빈을 선택적으로 등록이 가능
  • 필드 주입: '@Autowired'를 사용하는데 외부에서 변경이 불가능하여 테스트 하기 힘듬. DI 프레임워크 없이는 작동하기 힘들며, 주로 애플리케이션과 관계 없는 테스트 코드나 '@Configuration' 같은 스프링 설정 목적으로 사용