2026.04.14
스프링의 의존성 주입 방법
의존성 주입(DI, Dependency Injection)은 객체가 필요한 다른 객체를 직접 생성하지 않고, 외북에서 받아 사용하는 방식.
1. 생성자 주입
생성자를 통해 의존성을 주입하는 방식
특징
- 객체가 생성되는 시점에 의존성이 함께 주입됨.
- 필수 의존성을 반드시 전달받도록 만들 수 있음.
- final 사용이 가능해서 값의 변경을 막을 수 있음.
- 의존 관계가 코드에 명확하게 드러남.
- 가장 권장되는 방식
장점
- 객체의 안정성이 높음.
- 필수값 누락을 방지함.
단점
- 의존성이 많아질수록 생성자 매개변수가 길어질 수 있음.
2. 필드 주입
필드에 바로 의존성을 주입하는 방식
특징
- 코드가 짧고 단순해 보임.
- 의존성을 외부에서 명확하게 확인하기 어려움.
- final 사용이 어려움.
장점
단점
- 테스트하기 불편함.
- 객체의 의존관계가 숨겨져 보임.
- 유지보수 측면에서 좋지 않음.
- 일반적으로 권장되지 않음.
3. setter 주입
setter 메서드를 통해 의존성을 주입하는 방식
특징
- 객체 생성 후 의존성을 주입함.
- 선택적인 의존성을 처리할 때 사용할 수 있음.
- 주입 후에도 값이 변동될 가능성이 있음.
장점
- 선택적 주입에 사용할 수 있음.
- 상황에 따라 의존성을 바꿔 넣을 수 있음.
단점
- 필수 의존성 관리에는 적합하지 않음.
- 객체 상태가 바뀔 가능성이 있어 안정성이 떨어짐.
스프링의 의존성 주입 방식에는 생성자 주입, 필드 주입, setter 주입이 있음. 이 중 생성자 주입은 필수 의존성을 안정적이므로 주입할 수 있고, 의존관계가 명확하게 드러나기 때문에 가장 권장되는 방식임.
필드 주입은 간단하지만 유지보수와 테스트에 불리하고, setter 주입은 선택적 의존성 처리에는 적합하지만 안정성 면에서는 생성자 주입보다 약함.
스프링에서는 세 가지 의존성 주입 방식이 있지만, 안정성과 명확성 때문에 생성자 주입을 가장 많이 사용되고, 공식적으로 권장하고 있음.