제어 반전

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색

제어 반전, 제어의 반전, 역제어는 시스템의 흐름 제어가 절차적 프로그래밍에 역행하는 일부 소프트웨어 아키텍처 디자인을 간략히 기술해 놓은 원칙이다. 줄여서 IoC(Inversion of Control)이라고 부른다.

전통적인 프로그래밍에서 흐름은 중심이 되는 코드에게 통제를 받는다. 제어 반전을 사용하면 디자인 원칙으로서의 중심적인 통제는 뒤로 한다. 호출자가 마침내 응답을 받을지라도 호출자는 위치와 시기를 통제하지 못하는 상태가 된다. 호출 수신자가 바로 위치와 시기를 답할 수 있다. 설계 목적상 제어 반전의 목적은 다음과 같다:

  • 어느 한 작업을 실행하되 다른 객체와의 결합은 하지 않는다.
  • 모든 시스템은 디자인 목적에 초점을 둘 수 있다.
  • 모든 시스템은 다른 시스템이 하거나 해야할 것에 대한 어떠한 추측도 하지 않는다.
  • 시스템을 바꾼다고 하여 다른 시스템에 부작용을 일으키지 않는다.

[편집]

public class ServerFacade
{
  public Object respondToRequest(Object pRequest)
  {
    if(businessLayer.validateRequest(pRequest))
    {
      DAO.getData(pRequest);
      return Aspect.convertData(pRequest);
    }
 
    return null;
  }
}

위의 개요는 IoC 기술을 따른 코드의 예이다. 그러나 serverFacade에서 DAO 객체가 반환하는 데이터에 추측이 난무하다는 것이 중요하다. 이러한 모든 추측이 언젠가는 유효할 수도 있겠지만 이들은 serverFacade를 DAO와 결합시키게 된다. 제어 반전 개념으로 응용 프로그램을 설계하면 제어권을 완전히 DAO 객체로 이양하게 된다. 그러면 다음과 같이 된다.

public class ServerFacade
{
  public Object respondToRequest(Object pRequest)
  {
    return DAO.getData(pRequest);
  }
}

이렇게 교환을 했을 때 다음에 무엇이 일어날 것인가는 추측하지 않는다. 호출자와 호출 수신자는 분명히 serverFacade가 아니라는 것을 알고 있다. serverFacade는 시스템을 연결하도록 디자인한 그대로 작업을 진행한다.

같이 보기[편집]