Programming/Kotlin

[Kotlin] lateinit๋ž€?

yuri lee 2023. 5. 10. 23:51
๋ฐ˜์‘ํ˜•

Intro 

์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ์‹œ๊ฐ„์—๋Š” ์ฝ”ํ‹€๋ฆฐ์˜ lateinit ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

lateinit

์ฝ”ํ‹€๋ฆฐ์—์„œ "lateinit"๋Š” ๋ง ๊ทธ๋Œ€๋กœ late + init์ด ํ•ฉ์ณ์ง„ ๋œป์œผ๋กœ ๋‚˜์ค‘ ์ดˆ๊ธฐํ™”๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ์ง€์—ฐ ์ดˆ๊ธฐํ™” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 

 

Use

์ผ๋ฐ˜์ ์œผ๋กœ ํด๋ž˜์Šค๋‚˜ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€์ˆ˜ ์„ ์–ธ ์‹œ ์ฆ‰์‹œ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š๊ณ , ๋‚˜์ค‘์— ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

Condition

  1. ๋ณ€์ˆ˜๋Š” ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์ผ ๋•Œ๋งŒ lateinit๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๋ณ€์ˆ˜๋Š” non-null ํƒ€์ž…์ด์–ด์•ผ ํ•˜๋ฉฐ, primitive type์ด๋‚˜ String ๋“ฑ์˜ ํด๋ž˜์Šค ํƒ€์ž… ๋“ฑ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์ฆ‰์‹œ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณ€์ˆ˜๋Š” ์ดˆ๊ธฐํ™”๋˜๊ธฐ ์ „์— ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ lateinit ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๊ธฐ ์ „์— ํ•ญ์ƒ ์ดˆ๊ธฐํ™” ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋ฉด UninitializedPropertyAccessException ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  5. var๋กœ ์„ ์–ธ๋œ ํ”„๋กœํผํ‹ฐ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

Advantage

์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๋„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค.

 

Note

lateinit์„ ์‚ฌ์šฉํ•˜์—ฌ ์ดˆ๊ธฐํ™”๋ฅผ ์ง€์—ฐ์‹œํ‚ค๋Š” ๊ฒƒ์€ ์œ ์šฉํ•œ ๊ธฐ์ˆ ์ด์ง€๋งŒ, ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•ž์„œ ๋งํ–ˆ๋“ฏ์ด ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ lateinit ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๋ฉด UninitializedPropertyAccessException ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ, ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น ํ”„๋กœํผํ‹ฐ๊ฐ€ ์–ธ์ œ ์ดˆ๊ธฐํ™”๋˜๋Š”์ง€ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

๋ฐ˜์‘ํ˜•