https://yaboong.github.io/spring/2019/08/29/why-field-injection-is-bad/
정말 쉽게 잘 설명이 되어있습니다. 감사합니다.
18년도에 발행된 책으로 공부중입니다.
Autowired 관련 내용이 나오는데 책에서는 Autowired에 대해서 별 말 없이 사용중이지만 3년의 시간이 지난 지금은 Autowired가 편하기만 한 기능이라는 평가를 받고 있고 18년도에 들었던 강의에서도 Autowired가 빠지는 추세라는 것이 기억이나 자료를 찾아보았습니다.
DI (의존 주입)의 방식은 크게 2가지
가 있습니다. 그리고 Spring 에서 제공하는 방식인
- Field-Injection = @Autowired 방식이 있습니다.
Field-Injection을 왜 추천하지 않는가?
- Immutable 할 수 없음 = NullPointerException 이 뜰 수 있음
- 인스턴스화 불가
- 하나의 클래스가 많은 책임을 떠안을 수 있음 (강한 결합도)
-> 결국 리팩토링해야하는 징조가 될 수 있음
- 순환 참조 = 똑같은 경우는 아니지만 무한 루프와 유사한 현상이다.
-> ex) first class가 second class를 참조하고 second class가 first class 를 참조한다면 서로가 서로를 계속해서 참조하다 Stack Over Flow 에러 가 뜬다.
그리고 실제 코드를 호출 하기 전까지 알지 못한다는게 크다...
Setter Injection
주입이 필요한 객체가 주입이 되지 않아도 얼마든지 객체를 생성할 수 있다는 것이 문제다. 굳이 사용할 이유가 없다.
- Immutable X
=> NullPointerException 이 뜰 수 있다.
Constructor Injection 사용권장
- final 선언 가능하기 때문에 Immutable 함
- 단위 테스트 코드 작성 유리
- 순환참조 탐지가 가능함
- 의존 관계가 설정되지 않으면 객체생성 불가