== 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을 사용한다. ---- [SBPPSummary]