😥 문제

생성자 주입(Constructor Injection)을 사용해야 하는 이유

  1. 불변성(Immutability): 생성자 주입은 객체가 생성될 때 모든 의존성이 설정되기 때문에, 객체가 불변(immutable) 상태가 됩니다. 이는 객체가 생성된 이후에는 의존성이 변경되지 않음을 보장하여 코드의 안정성을 높입니다.
  2. 강한 의존성 명시: 생성자 주입을 사용하면 필요한 의존성을 생성자 매개변수로 명시하게 되어, 객체가 어떤 의존성을 필요로 하는지 명확하게 드러납니다. 이는 코드의 가독성을 높이고, 잘못된 사용을 방지합니다.
  3. 테스트 용이성: 생성자 주입은 의존성을 주입하기 위해 별도의 설정이 필요 없으므로 단위 테스트 작성이 용이합니다. Mock 객체나 Stub 객체를 생성자에 전달하여 쉽게 테스트할 수 있습니다.
  4. 순환 의존성 방지: 생성자 주입을 사용하면 순환 의존성(Circular Dependency) 문제를 사전에 발견할 수 있습니다. 컴파일 시점에 순환 의존성을 체크할 수 있어 런타임 오류를 방지할 수 있습니다.

다른 주입 방식들의 단점

  1. 세터 주입(Setter Injection):
  2. 필드 주입(Field Injection):

결론

생성자 주입은 객체의 불변성을 보장하고, 의존성을 명확하게 드러내며, 테스트를 용이하게 만들어줍니다. 반면에 세터 주입과 필드 주입은 객체 상태의 불명확성, 캡슐화 위반, 테스트의 어려움 등의 단점을 가지고 있습니다. 따라서, 의존성 주입 방법 중 생성자 주입이 가장 바람직한 선택으로 여겨집니다

🙌🏻 해결 방법

생성자 주입으로 사용하자

🔎 참고 자료

https://yaboong.github.io/spring/2019/08/29/why-field-injection-is-bad/