생성자 주입 사용하기

일고잉·2021년 7월 23일
0

나는 스프링에서 필드 의존성 주입을 하라고 배웠다

그런데 인텔리제이가 Field injection을 하지말라고 경고한다.
그래서 그에 대한 내용을 찾아봤다.

스프링에서 권장하는 일반적인 DI 가이드라인은 다음과 같다.

  • 필수 의존성이나 불변성이 목적이면 생성자 주입을 사용한다.
  • 선택적 또는 변경 가능한 의존성에는 setter 주입을 사용한다.
  • 웬만하면 필드 주입을 피하라.

Field Injection의 단점

  • 생성자 주입처럼 변경할 수 없는 객체를 만들 수 없다.
  • 클래스는 DI 컨테이너와 긴밀하게 연결되어 있으며 외부에서 사용할 수 없다.
  • 리플렉션 없이는 클래스를 인스턴스화할 수 없다. 인스턴스화하려면 DI 컨테이너가 필요하므로 테스트를 통합 테스트와 유사하게 만든다.
  • 실제 의존성은 외부에서 숨겨져 있으며 인터페이스(생성자 또는 메서드)에 반영되지 않는다.

결론

필요에 따라 생성자 주입을 사용하거나 생성자와 setter 주입을 혼합하여 사용해야 한다. 필드 주입에는 많은 단점이 있으므로 피해야 한다. 유일한 장점은 쓰기가 더 편리하다는 것이다.

참고

0개의 댓글