스프링을 학습하면 IoC와 DI가 항상 등장하는데 둘을 비슷한 개념으로 보았다. 이번 기회를 통해 두 단어가 의미하는 것이 무엇이고 어떻게 다른지 이해하고자 한다.
IoC(Inversion of Control)
- 객체가 자신이 사용할 객체를 직접 생성하고 관리하지 않고, 외부에서 생성하고 관리하는 방식
- 제어의 권한이 객체 자신에서 외부로 이전
- spring에서는 컨테이너가 객체(Bean)를 관리하며, 이로써 객체간 결합도를 낮추어 유연한 코드를 작성할 수 있다.
DI(Dependency Injection)
- 객체가 의존하는 객체를 외부에서 주입받는 것 ex) 생성자, 메서드, 인터페이스
- 객체간 결합도를 낮추고 테스트하기 쉬운 코드를 작성할 수 있다.
DI와 IoC
- DI는 IoC를 구현한 하나의 방법이라고 볼 수 있다.