Inversion Of control
juneyr··
제어의 역전
Spring 을 처음에 배울 때 마주하는 개념이 IoC(Inversion Of Control) 혹은 DI(Dependency Injection)이다. 컴퓨터 용어는 전반적으로, 아는 사람이 보면 기가 막힌 용어지만 한눈에 알아보기는 어렵게 만들어진 것 같다. 이 역시 대표적인 사례이다.
johngrib님의 블로그를 복습차원에서 보다가 다시 이 개념을 마주했다. IoC를 가장 잘 설명한 것 토비의 스프링 3.1 의 구절이다.
제어의 역전이라는 것은, 간단히 프로그램의 제어 흐름 구조가 뒤바뀌는 것이라고 설명할 수 있다. 일반적으로 프로그램의 흐름은 main() 메소드와 같이, 프로그램이 시작되는 지점에서 (직접) 다음 사용할 오브젝트를 결정하고, 결정한 오브젝트를 생성하고, 만들어진 오브젝트에 있는 메소드를 호출하고, 그 오브젝트 메소드 안에서 다음에 사용할 것을 결정하고 호출하는 식의 작업이 반복된다. 이 구조에서는 각 오브젝트는 프로그램 흐름을 결정하거나 사용할 다른 오브젝트를 구성하는 작업에 능동적으로 참여한다.
제어의 역전이란 이런 제어의 흐름 개념을 거꾸로 뒤집는 것이다. 제어의 역전에서는 오브젝트가 자신이 사용할 오브젝트를 스스로 선택하지 않는다. 당연히 생성하지도 않는다. 또 자신도 어떻게 만들어지고 어디서 사용되는지를 알 수 가 없다. 프로그램의 시작을 담당하는 엔트리 포인트를 제외하면, 모든 오브젝트는 이렇게 위임받은 제어권한을 받은 특별한 오브젝트에 의해 결정되고 만들어진다.