Lazy Initialization ¶
ExplicitInitialization의 모든 장점은 단점으로, 단점은 장점으로 된다. 당연하다.(--;)
LazyInitialization의 하나의 변수당 두개의 메소드로 나눠서 초기화를 한다. 하나는 변수가 LazyInitialization되는 것을 감추어 주는 getter이고, 다른 하나는 변수에다 디폴트값으로 할당을 해줄 DefaultValueMethod이다. 이 방법은 유연성이 증대된다. 당신이 서브클래스를 만든다면, DefaultValueMethod를 오버라이딩함으로써, 기능을 바꿀 수 있다. 전장에서도 언급했듯이 성능도 증대시킬 수 있다.
LazyInitialization의 하나의 변수당 두개의 메소드로 나눠서 초기화를 한다. 하나는 변수가 LazyInitialization되는 것을 감추어 주는 getter이고, 다른 하나는 변수에다 디폴트값으로 할당을 해줄 DefaultValueMethod이다. 이 방법은 유연성이 증대된다. 당신이 서브클래스를 만든다면, DefaultValueMethod를 오버라이딩함으로써, 기능을 바꿀 수 있다. 전장에서도 언급했듯이 성능도 증대시킬 수 있다.
변수마다 getter를 만들자. 필요하다면 DefaultValueMethod를 써서 초기화를 하자.
앞에서 살펴본 타이머 예제로 해보자.
~cpp
Class Timer
{
/* ... */
int getCount()
{
if(!count) // --; 어쩔수 없다. 그냥 옮긴거다.
count = defaultCount();
return count;
}
int defaultCount()
{
return 0; // 상수로 해결가능할듯
}
int getPeriod()
{
if(!period)
period = defaultPeriod();
return period;
}
int defaultPeriod()
{
return 1000; // 상수로 해결가능할듯
}
};









