최근 트렌드는 DI 프레임워크 대부분이 생성자 주입을 권장한다. 이유를 알아보자.
생성자 주입이 권장되는 이유
불변
대부분 주입된 의존 관계는 한번 일어나면 애플리케이션의 종료 시점까지 의존관계를 변경할 일이 거의 없다. 오히려 대부분의 의존 관계는 종료시점까지 변경되면 안되는 불변을 지향한다.
이러한 이유 때문에, 메서드를 public으로 열어놓아야하는 수정자 주입은 누군가 이 메서드로 중간에 의존 관계를 변경할 수도 있고, 변경하면 안되는 메서드를 열어두는 것은 좋은 방법이 아니다.
즉, 생성자 주입은 딱 1회 일어나므로 값이 변경될 수 없는 불변의 특성을 가지고 있기 때문에 생성자 주입이 권장된다.
누락
인터페이스가 DI 프레임워크에 의존적이 되므로, 어느 하나의 스프링빈이라도 의존 관계가 주입되지 않으면 실행 되지 않는다.
생성자 주입시 주입 데이터라 누락 되었을 때는 컴파일 오류가 발생한다. -> IDE에서 어떤 값을 필수로 주입해야하는지 알 수 있다
final 키워드
생성자 주입시 필드에 final 키워드 사용이 가능하다. -> 생성자에서 혹시라도 값이 설정되지 않는 오류를 컴파일 시점에 막아준다.
생성자 주입 정리
- 생성자 주입을 제외한 나머지 메서드들을 모두 생성자 이후 호출되므로 필드에 final 키워드를 사용할 수 없다
- 생성자 주입은 프레임워크에 의존하지 않고 순수 자바 언어의 특징을 잘 보여준다.
- 생성자 주입을 디폴트로 사용하고, 옵션으로 수정자 주입 방식을 쓰자
=> 걍 생성자 주입써라 !
'Spring > Core' 카테고리의 다른 글
[Spring] Bean Scope - Prototype 빈에 try-with-resources 적용해보기 (0) | 2025.06.20 |
---|---|
[Spring] 한 컨테이너 안에 같은 타입의 빈이 2개라면? (0) | 2025.06.19 |
[Spring] Dependency Injection : 의존 관계 주입의 4가지 방법 (0) | 2025.06.19 |
[Spring] @ComponentScan , @AutoWired - 자동 Bean 등록 (0) | 2025.06.16 |
[Spring] Singleton 패턴 : 인스턴스 아나바다 운동 (0) | 2025.06.16 |