Inversion of Control (IoC) is a design principle in software engineering that decouples the execution of tasks from the control flow, allowing a framework or external entity to dictate the program's flow. This leads to more modular, testable, and maintainable code by abstracting away the control logic from the business logic.