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

LazyInitialization

From ZeroWiki
Revision as of 05:23, 7 February 2021 by imported>Unknown
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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