IoC는 객체 생성이나 의존관계 설정 등의 제어권을 객체 자체가 아닌 외부에 맡기는 개념입니다. DI는 객체가 필요한 의존성을 직접 생성하지 않고 외부에서 전달받는 방식으로, IoC를 구현하는 대표적인 방법입니다. Spring에서는 Spring Container가 Bean을 생성하고 필요한 의존성을 찾아 주입함으로써 이를 구현합니다. 다만 DI를 사용한다고 반드시 느슨한 결합이 되는 것은 아니며, 구체 구현체가 아니라 적절한 추상화에 의존하도록 설계하는 문제는 별도로 고려해야 합니다.
DI는 IoC를 구현하는 대표적인 방법 중 하나이다!