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