제어 반전

위키백과, 우리 모두의 백과사전.

프로그래머가 작성한 프로그램이 재사용 라이브러리의 를 받게 되말한 프로그래밍에서 흐름은 프로그래머가 작성한 프로그램이 외부 라이브러리의 코드를 호출해 이용한다. 하지만 제어 반전이 적용된 구조에서는 외부 라이브러리의 코드가 프로그래머가 작성한 코드를 호출한다. 설계 목적상 제어 반전의 목적은 다음과 같다:

  • 작업을 구현하는 방식과 작업 수행 자체를 분리한다.
  • 모듈을 제작할 때, 모듈과 외부 프로그램의 결합에 대해 고민할 필요 없이 모듈의 목적에 집중할 수 있다.
  • 다른 시스템이 어떻게 동작할지에 대해 고민할 필요 없이, 미리 정해진 협약대로만을 일으키지 않는다.

[편집]

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

    return null;
  }
}

위의 코드를 통해 IoC가 어떻게 이용되는지를 알 수 있다. 위에서 serverFacade에서 DAO 객체를 이용할 때 businessLayer객체가 pRequest를 검증하는 방법과 Aspect 객체가 DAO에서 처리한 pRequest를 변환하는 방법이 미리 정해져 있다. 이와 같이 정해진 방법들이 유효할 때도 있겠지만, 이 방법들을 정해 두면 serverFacade 클래스는 DAO와 결합되게 된다. 제어 반전 개념으로 다음과 같이 응용 프로그램을 설계하면 제어권을 완전히 DAO 객체로 이양하게 된다.

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

이 예를 보면, respondToRequest라는 메서드가 인자들을 다루는 방식을 통해 IoC가 적용되었는지 여부를 확인할 수 있다.

같이 보기[편집]

외부 링크[편집]