스프링은 다양한 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 |