수빈
의존성 주입은 생성자기반, 세터기반, 필드기반 과 같이 3가지로 구분됩니다.
- Spring이 아니면 해당 필드에 Injection 하기 힘듭니다. (테스트 할 때 힘듦)
- final 키워드를 사용할 수 없습니다.
필수적인 의존성에서는 생성자 기반을,
선택적인 의존성에는 세터 기반을 사용해 주입 하는것이 좋습니다.
민환
- Spring(DI 프레임워크)이 아니면 실행할 수 없습니다.
- final 키워드를 사용할 수 없어 불변성을 보장할 수 없게 됩니다.
- 첫번째와 더불어 테스트가 어려운 구조가 됩니다. (Mock 등으로 대처가 불가능합니다.)
- NullPointException이 발생할 수 있습니다.
이러한 문제점들 때문에 생성자 주입을 사용해야 합니다.
용수
- 외부에서 변경이 불가능하다
- 테스트 코드 작성시에 객체 수정이 불가능하다
- DI 프레임워크에 의존적이다
- 의존 관계를 보기 힘들다