본문 바로가기
Back-end

Spring DI 방식

by 신재권 2023. 9. 8.

스프링은 다양한 DI 방식을 지원하며, 주요한 방식에는 setter, constructor, field가 있다.

Setter

  • 장점
    • 빈의 의존성을 설정하거나 변경하기 쉽다.
    • 일부 의존성을 필수가 아닌 선택적으로 설정할 수 있다.
  • 단점
    • 필수 의존성이 설정되지 않았을 경우 런타임 오류가 발생할 수 있다.
    • 설정된 값이 변경될 수 있으므로 불변성을 보장하지 않는다.
  • 언제 사용 : 선택적 의존성을 갖는 빈을 생성할 때 또는 런타임에 의존성을 변경할 때 사용한다.
  • 문제점 : 필수 의존성이 설정되지 않은 상태에서 빈을 생성하려고 할 때 런타임 예외가 발생할 수 있다.

Constructor

  • 장점
    • 생성자를 통해 필수 의존성을 보장하므로 런타임 오류를 줄일 수 있다.
    • 생성자를 통해 설정된 의존성은 변경이 불가능하므로 불변성이 보장된다.
  • 단점
    • 의존성이 많은 클래스의 경우 생성자가 길어지고 복잡해질 수 있다.
  • 언제 사용 : 필수 의존성이 있는 빈을 생성할때나, 빈의 불변성을 보장할 때 사용

Field Injection

  • 장점
    • 코드가 간결하고 가독성이 좋다.
    • setter나 생성자를 작성할 필요가 없다.
  • 단점
    • 의존성이 런타임에 변경될 수 있다.
    • 필드 의존성을 목(mock) 객체로 대체하기 어렵다.

'Back-end' 카테고리의 다른 글

@Bean, @Configuration  (0) 2023.09.14
불변성  (0) 2023.09.08
JDK 동적 프록시, CGLIB  (0) 2023.09.08
상속보다 합성을 이용하는 이유  (0) 2023.09.06
스레드를 무한정 만든다면?  (0) 2023.08.31