개발 일지/Spring

[Spring] 의존성 주입(Dependency Injection, DI)

미숫가루설탕많이 2023. 1. 4. 20:19

 Spring Framework의 3가지 핵심 프로그래밍 중 하나인 의존성 주입(DI)은 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴이다.

 

 의존성 주입의 기본적인 의미는 '외부'에서 클라이언트에게 서비스를 제공하는 것이다. 즉, 객체가 필요로 하는 어떤 것을 외부에서 전달해주는 것으로 생각할 수 있다. 인터페이스를 사이에 둬서 클래스 단계에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 동적으로 주입해서 유연성을 확보하고 결합도를 낮출 수 있게 해준다.

 

 의존성을 주입하는 방법에는 생성자 주입, setter 주입, 필드 주입 등 정말 다양하다. 이 중에서 최근 가장 많이 쓰이는 방법은 생성자 주입이다. 그 이유는 다음과 같다.

 

 우선 생성자 주입은 객체를 생성할 때 1번만 호출되므로 이후에 호출되는 일이 없다. 따라서 불변하게 설계할 수 있으며 불변, 필수 의존관계에 사용한다.

 

 두 번째로 생성자 주입을 사용하면 필드에 final 키워드를 사용할 수 있다. 따라서 생성자에서 혹시라도 값이 설정되지 않는 오류를 컴파일 시점에서 막아준다.

 

 이러한 두 가지 이유로 스프링을 포함한 DI 프레임워크 대부분이 생성자 주입을 권장한다.

 

 

 

 

의존성 주입의 장점

 

  • 코드의 재사용성, 유연성이 높아지고 유지보수가 쉽다.

  • 클래스 간의 결합도를 줄일 수 있다.

  • 모의 객체 등을 이용한 단위 테스트의 편의성을 높여준다.

  • 확장성을 갖는다.

 

 

 

 

의존성 주입의 단점

 

  • 간단한 프로그램의 경우 오히려 번거로울 수 있다.

  • 동작, 구성을 분리하기 때문에 코드 추적이 어렵다.
  • 가독성이 떨어질 수 있다.

'개발 일지 > Spring' 카테고리의 다른 글

[Spring] Spring Boot  (0) 2023.02.03
[Spring] PSA  (0) 2023.02.02
[Spring] AOP  (0) 2023.02.02
[Spring] IoC / DI  (0) 2023.02.02
[Spring] POJO  (0) 2023.02.02