과거에는 수정자 주입과 필드 주입을 많이 사용했지만, 최근에는 스프링을 포함한 DI 프레임워크 대부분이 생성자 주입을 권장한다.
불변
누락
프레임워크 없이 순수한 자바 코드를 단위 테스트 하는 경우에
생성자 주입을 사용하면 Null Point Exception이 발생하는데 생성자에 주입 데이터를 누락 했을 때 컴파일 오류가 발생한다.
final 키워드
생성자 주입을 사용하면 필드에 final 키워드를 사용할 수 있다. 그래서 생성자에서 혹시라도 값이 설정되지 않는 오류를 컴파일 시점에 막아준다.
java: variable dicountPolicy might not have been initialized (java: 변수 dicountPolicy가 초기화되지 않았을 수 있습니다.)
수정자 주입을 포함한 나머지 주입 방식은 모두 생성자 이후에 호출되므로, 필드에 final 키워드를 사용할 수 없다. 오직 생성자 주입 방식만 final 키워드를 사용할 수 있다.
정리