Intro
์๋ ํ์ธ์. ์ด๋ฒ์๊ฐ์๋ ์ฝํ๋ฆฐ์ lateinit ์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
lateinit
์ฝํ๋ฆฐ์์ "lateinit"๋ ๋ง ๊ทธ๋๋ก late + init์ด ํฉ์ณ์ง ๋ป์ผ๋ก ๋์ค ์ด๊ธฐํ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ฆ ์ง์ฐ ์ด๊ธฐํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
Use
์ผ๋ฐ์ ์ผ๋ก ํด๋์ค๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์ ์ธํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ํด๋น ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณ์ ์ ์ธ ์ ์ฆ์ ์ด๊ธฐํ๋์ง ์๊ณ , ๋์ค์ ์ด๊ธฐํ ํ ์ ์์ต๋๋ค.
Condition
- ๋ณ์๋ ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์์ผ ๋๋ง lateinit๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋ณ์๋ non-null ํ์ ์ด์ด์ผ ํ๋ฉฐ, primitive type์ด๋ String ๋ฑ์ ํด๋์ค ํ์ ๋ฑ์ด ๋ ์ ์์ต๋๋ค.
- ๋ณ์๋ฅผ ์ ์ธํ ๋ ์ฆ์ ์ด๊ธฐํํ์ง ์์์ผ ํฉ๋๋ค.
- ๋ณ์๋ ์ด๊ธฐํ๋๊ธฐ ์ ์ ์ฌ์ฉํ๋ฉด ์ ๋ฉ๋๋ค. ๋ฐ๋ผ์ lateinit ๋ณ์์ ์ ๊ทผํ๊ธฐ ์ ์ ํญ์ ์ด๊ธฐํ ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํด์ผ ํฉ๋๋ค. ์ด๊ธฐํ๋์ง ์์ ๋ณ์์ ์ ๊ทผํ๋ฉด UninitializedPropertyAccessException ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
- var๋ก ์ ์ธ๋ ํ๋กํผํฐ์ฌ์ผ ํฉ๋๋ค.
Advantage
์ด๋ฅผ ํตํด ์ฝ๋์ ์ ์ฐ์ฑ๊ณผ ์ฑ๋ฅ์ ๋์ผ ์ ์์ต๋๋ค. ๋ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๋ ์ค์ฌ์ค๋๋ค.
Note
lateinit์ ์ฌ์ฉํ์ฌ ์ด๊ธฐํ๋ฅผ ์ง์ฐ์ํค๋ ๊ฒ์ ์ ์ฉํ ๊ธฐ์ ์ด์ง๋ง, ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ฃผ์ํด์ผ ํฉ๋๋ค. ์์ ๋งํ๋ฏ์ด ์ด๊ธฐํ๋์ง ์์ lateinit ํ๋กํผํฐ์ ์ ๊ทผํ๋ฉด UninitializedPropertyAccessException ์๋ฌ๊ฐ ๋ฐ์ํ๋ฏ๋ก, ์์ ํ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ํด๋น ํ๋กํผํฐ๊ฐ ์ธ์ ์ด๊ธฐํ๋๋์ง ๊ณ ๋ คํด์ผ ํฉ๋๋ค.