DIP와 IoC는 우선 다른 개념이다.
DIP (Dependency Inversion Principle - 의존성 역전 원칙)
DIP는 SOLID 원칙 중 하나로, 상위 수준 모듈이 하위 수준 모듈에 의존해서는 안되며, 모두 추상화에 의존해야 한다는 원칙입니다. 즉, 구체적인 구현에 의존하지 말고, 인터페이스나 추상화에 의존함으로써 모듈 간의 결합도를 낮추고 유연성을 확보하는 것입니다.
IoC (Inversion of Control)
IoC는 제어의 역전을 의미하며, 객체 생성과 의존성 관리의 흐름을 뒤집는 개념입니다. 일반적으로 프로그램의 흐름은 개발자가 직접 제어합니다. 하지만 IoC에서는 제어의 권한이 프레임워크나 컨테이너로 넘어갑니다. 즉, 제어의 주체를 역전시켜 객체 생성과 관리를 외부로 위임하는 것입니다.
DIP와 IoC의 관계:
의존성 역전 원칙(DIP)을 따르기 위해 코드를 설계할 때, 낮은 레벨의 모듈을 만들 때 해당 모듈이 어떻게 작동하는지 알지 않아도 되게끔 해야 합니다. 그리고 제어의 역전(IoC)을 통해 프레임워크나 컨테이너가 객체를 만들고 관리하는 것을 의미합니다.
요약하면, DIP를 따르면 낮은 레벨의 모듈과 상위 레벨의 모듈 간의 결합도를 줄일 수 있고, IoC를 사용하면 프로그램의 흐름을 역전시켜 유연하게 객체를 생성하고 관리할 수 있습니다. 이 두 가지 개념이 함께 사용되면 소프트웨어의 구조와 유지보수성을 향상시키는 데 도움을 줄 수 있습니다.
DIP는 코드의 모듈 간 관계를 지정하는 원칙이며, IoC는 이 원칙을 실현하기 위한 제어의 주체를 역전시켜 객체 생성과 관리를 외부로 위임하는 개념.