Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

LazyInitialization

From ZeroWiki

Lazy Initialization

ExplicitInitialization의 모든 장점은 단점으로, 단점은 장점으로 된다. 당연하다.(--;) LazyInitialization의 하나의 변수당 두개의 메소드로 나눠서 초기화를 한다. 하나는 변수가 LazyInitialization되는 것을 감추어 주는 getter이고, 다른 하나는 변수에다 디폴트값으로 할당을 해줄 DefaultValueMethod이다. 이 방법은 유연성이 증대된다. 당신이 서브클래스를 만든다면, DefaultValueMethod를 오버라이딩함으로써, 기능을 바꿀 수 있다. 전장에서도 언급했듯이 성능도 증대시킬 수 있다.


변수마다 getter를 만들자. 필요하다면 DefaultValueMethod를 써서 초기화를 하자.


앞에서 살펴본 타이머 예제로 해보자.

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을 사용한다.


SBPPSummary