의존 관계 주입(DI)의 조건
Opened this issue · 2 comments
chomily commented
토비의 스프링 114p, 119p에 따르면 DI의 조건으로 구체 클레스가 아닌 인터페이스
에 의존하고 있어야한다고 말한다.
114p: 클래스 모델이나 코드에는 런타임 시점의 의존관계가 드러나지 않는다. 그러기 위해서는 인터페이스에만 의존하고 있어야 한다
119p: DI에서 말하는 주입은 다이내믹하게 구현 클래스를 결정해서 제공받을 수 있도록 인터페이스 타입의 파라미터를 통해 이뤄져야 한다
그러면 우리가 사용하는 Controller, Service 등 하나의 구체 클래스를 만들어 의존 주입하는 경우는 DI라고 말할 수 없는 걸까?
chomily commented
엄밀히 말하면 DI는 인터페이스에 의존하는 것이 맞다.
하지만 넓은 의미의 IoC에서 구체 클래스를 '주입'시켜 제어를 역전 시키는 것도 의존 주입이라고 볼 수는 있다.
참조 링크
SeokRae commented
의존 관계 주입에 대한 정의 (p.233)
- 스프링의 DI는 기본적으로 인터페이스를 사이에 두고 의존 클래스를 바꿔서 사용하는 게 목적이다.
의존관계 주입의 개념 (p.236)
- 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않게하고, 런타임 시에 의존할 오브젝트와의 관계를 다이나믹하게 주입해 주는 것이 맞다.
- 따라서 인터페이스를 사용하지 않았다면 엄밀히 말해 온전한 DI라 볼 수는 없다.
- 그러나 스프링의 DI는 넓게 보자면 객체의 생성과 관계설정에 대한 제어권한을 오브젝트에서 제거하고 외부로 위임했다는 IoC라는 개념을 포괄한다.
- 그런 의미에서 JdbcContext를 스프링을 이용해 UserDao 객체에서 사용하게 주입했다는 건 DI의 기본을 따르고 있다고 볼 수 있다.
인터페이스를 사용하지 않는 클래스를 직접 의존하는 DI가 등장하는 경우 (p.236)
- p.236(마지막 문단) ~ p.237 (두번 째 문단까지)