흔히 "제어"라고 하면 사용자, 개발자 입장에서 필요할때마다 제어관련 컨트롤러 및 기능을 호출하여 해당 시점에서 적절한 동작이 이루어지도록 하는 흐름(flow)을 떠올릴 것이다.
이러한 흐름은 기본적으로 객체를 통해 이루어진다고 생각하면 이해가 쉽고, 제어 역행 역시 객체개념을 중심으로 이해하면 좋을 것 같다.
제어를 하는데 필요한 객체를 개발자가 그때그때마다 생성한다고 하면, 직관적으로 생각해도 매우 비효율적일것 같다.
특히 해당 제어가 수정이 필요할때 관련한 모든 객체를 수정해야한다면 그만큼 번거로운 수정작업을 거쳐야 할 것이고, 확장어려우며 유지보수가 어려운 코드가 될 수 밖에 없다.
따라서 제어가 필요할때마다 애플리케이션 측에서, 혹은 모듈 측에서 자율적으로 생성하는 과정이 필요하다는 개념이 나오게 되었다.
Inversion Of Control, 제어의 흐름을 사용자/개발자가 아닌 application에 책임을 전가한다는 개념이다.
애플리케이션이 필요할때마다 객체를 생성한다면 그만큼 결합도가 낮아지고, 특정 객체에 대한 의존성이 없는 유지보수측면에서 유리한 환경을 구성할 수 있다.
제어역행 개념 - https://gf0308.tistory.com/16