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; // ์์๋ก ํด๊ฒฐ๊ฐ๋ฅํ ๋ฏ } };
๋ณ๋ก ์์ธ๋ฏํ์ง๋ง... ์ผํธ๋ฒก ์ : ์ผ๋จ์ ExplicitInitialzation์ผ๋ก ์ถ๋ฐ์ ํ๊ณ , ์์๋ ๊ฑฐ ๊ฐ์ผ๋ฉด LazyInitialization์ ์ฌ์ฉํ๋ค.