E D R , A S I H C RSS

Lazy Initialization

Lazy Initialization

ExplicitInitialization의 모든 장점은 단점으로, 단점은 장점으로 된다. 당연하다.(--;)
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;	// 상수로 해결가능할듯
	}
};

별로 안쓸듯하지만... 켄트벡 왈 : 일단은 ExplicitInitialzation으로 출발을 하고, 상속될 거 같으면 LazyInitialization을 사용한다.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.0987 sec