지연된 로딩

지연된 로딩, 레이지 로딩(lazy loading), 게으른 로딩은 필요 시점까지 객체의 초기화를 연기시키기 위해 컴퓨터 프로그래밍에 흔히 사용되는 디자인 패턴의 하나이다. 적절하게 사용될 경우 프로그램의 운영 차원에서 효율성에 기여할 수 있다. 그 반대의 경우 열정적인 로딩(즉시 로딩, eager loading)이라고 부른다. 웹페이지 등의 케이스에서 네트워크 콘텐츠가 접근되고 초기화 시간을 최소로 유지해야 하는 상황에서 이상적이다.

구현 
구현 방법으로는 지연된 초기화, 가상 프록시, 고스트 밸류 홀더가 있다. 제각기 장단점이 있다.

지연된 초기화 

private int myWidgetID;
private Widget myWidget = null;

public Widget MyWidget
{
    get
    {
        if (myWidget == null)
        {
            myWidget = Widget.Load(myWidgetID);
        }

        return myWidget;
    }
}

private int myWidgetID;
private Widget myWidget = null;

public Widget MyWidget
{
   get { return myWidget = myWidget ?? Widget.Load(myWidgetID);  }
}

고스트 
$userData = array (
    "UID" = > uniqid(),
    "requestTime" => microtime( true ),
    "dataType" => "",
    "request" => ""
);

if (isset( $_POST['data'] ) && $userData) {
    //...

}

밸류 홀더 
private ValueHolder<Widget> valueHolder;

public Widget MyWidget
{
    get
    {
        return valueHolder.GetValue();
    }
}

각주 

소프트웨어 디자인 패턴