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 2021-02-07 05:23:37
Processing time 0.0118 sec