Back-end/Spring
[Spring] DI(Dependency Injection) 종류는 어떤 것이 있고, 이들의 차이는 무엇인가요?
호비_hobi
2021. 11. 16. 12:14
DI(Dependency Injection: 의존성 주입)
외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴으로, 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 다이나믹하게 주입하여 유연성을 확보하고 결함도를 낮출 수 있게 해준다.
의존성이란 한 객체가 다른 객체를 사용할 때 의존성이 있다고 한다.
- 두 객체 간의 관계라는 관심사의 분리
- 두 객체 간의 결합도를 낮춤
- 객체의 유연성을 높임
- 테스트 작성을 용이하게 함
DI는 세가지 방법이 있습니다. 생성자 삽입, Setter를 이용한 메소드 매개 변수 삽입, 필드 주입이 있습니다.
- 생성자 주입: 생성자 호출 시점에 딱 1번만 호출되는 것을 보장하며, 불변, 필수 의존관계에 사용
- Setter 주입: 선택, 변경 가능성이 있는 의존관계에 사용되며 스프링빈을 선택적으로 등록이 가능
- 필드 주입: '@Autowired'를 사용하는데 외부에서 변경이 불가능하여 테스트 하기 힘듬. DI 프레임워크 없이는 작동하기 힘들며, 주로 애플리케이션과 관계 없는 테스트 코드나 '@Configuration' 같은 스프링 설정 목적으로 사용