๋ฆ์ ์ด๊ธฐํ ๋ผ ํจ์, ๋ง ๊ทธ๋๋ก ๊ฐ์ฒด ์ด๊ธฐํ๋ฅผ ๋ฆ๊ฒ ํ๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด ๋ถ๋ช
๋ณ์ a
๋ฅผ ์ฌ์ฉํ ์์ ์ธ๋ฐ, a
์ ์ฒซ ์ํ๋ฅผ ์ ์ํ๊ธฐ ์ด๋ ค์ธ ๋ ์ด๋ป๊ฒ ํ๊ฒ ๋๊ฐ?
์ด๋ค ๊ณ์ฐ ๊ฒฐ๊ณผ ๊ฐ์ด ํ์ํ๋ค๊ฑฐ๋ ํ๋ ๋ฑ์ ์ํฉ์์ ๋ง์ด๋ค. ๊ทธ๋ผ ์ฐ๋ฆฐ ์ด๋ ๊ฒ ํ ์ ์๋ค.
var a: String? = null
๊ทธ์น๋ง ์ด์ฐจํผ ์ดํ์ ๋ถ๋ช
์ฌ์ฉํ ๋
์์ธ๋ฐ ๊ตณ์ด ์ํํ๊ฒ ์ด๊ธฐ ์ํ๋ก null
์ ์ฌ์ฉํด์ผ ํ ๊น? ๋ถ๋ช
null
์ฌ์ฉ์ ์ง์์ ๊ฐ์กฐํ๋ ์ฝํ๋ฆฐ์ ๋ง๋ ์ฐฝ์์๋ค๋ ๋ถ๋
ธํ ๊ฒ์ด ๋ปํ๋ค..
๐ฎ๐ปโโ๏ธ : ๊ทธ๋ ๊ฒ
null
์์ ํ๋ผ๊ณ ํ๋๋ฐ ์ง์ง ๊ฐ ๋ ์ ๋์๋ค์ ใ ใ
๐ฅบ : ๊ทธ๋ผ ๋ญ ์ด๋ป๊ฒ ํ๋ผ๊ตฌ์ ๋์ฒด..
๐ฎ๐ปโโ๏ธ : ๋ฆ์...
๐ฅบ : ์ด๋ฏธ ๋ฆ์๋ค๊ตฌ์..?
๐ฎ๐ปโโ๏ธ : ์๋lateinit
๋lazy
์จ์ ๋ฆ์ ์ด๊ธฐํ ํ๋ผ๊ณ ์;
๋ฐ๋ผ์, ์ค๋์ ๋ฆ์ ์ด๊ธฐํ ๊ธฐ๋ฒ์ ์ํ lateinit
๊ณผ lazy
์ ๋ํ์ฌ ์์๋ณด์.
lateinit
๋ฐฑ๋ฌธ์ด ๋ถ์ฌ์ผ๊ฒฌ์ด๋ค. ์ผ๋จ ์ฝ๋๋ถํฐ ์ดํด๋ณด์.
fun main() {
lateinit var text: String
// ๋์ถฉ ์ค๊ฐ์ ๋ญ๊ฐ ํ์
val result1 = 30
text = "Result : $result1"
println(text)
// ๋์ถฉ ๋ญ๊ฐ ๋ ํ์
val result2 = 50
text = "Result : ${result1 + result2}"
println(text)
}
lateinit
์ ์ฌ์ฉํ์ฌ text
๋ณ์๋ฅผ ์ ์ธํด์คฌ๊ณ , ์ดํ์ ์ด๋ค ๋์์ ๊ฒฐ๊ณผ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก text
๋ฅผ ์ด๊ธฐํ ํด์ฃผ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ดํ์ ๋ ํ ๋ฒ ๊ฐ์ ๋ฐ๊พธ๋ ๊ฒ์ ํ์ธํ ์ ์๋๋ฐ, lateinit
๋ณ์ ์ ์ธ๋ถ๋ฅผ ์์ธํ ๋ณด๋ฉด var
๋ก ์ ์ธ๋์ด ์๋ค. lateinit
์ ์ฌ์ฉํ๋ฉด ๋ฆ์ ์ด๊ธฐํ ์ดํ์๋ ๊ฐ์ด ๊ณ์ํ์ฌ ๋ฐ๋ ์ ์๋ค.
๊ทธ๋ผ, ๋ง์ฝ lateinit
์ ์ฌ์ฉํด๋๊ณ ๋ฆ์ ์ด๊ธฐํ์กฐ์ฐจ ํ์ง ์์ ๊ฒฝ์ฐ๋ ์ด๋ป๊ฒ ๋ ๊น?
์๋์ ๊ฐ์ ์๋ฌ๋ฅผ ๋ณผ ์ ์์ ๊ฒ์ด๋ค.
Exception in thread "main" kotlin.UninitializedPropertyAccessException: lateinit property text has not been initialized
์ด๋ฐ์์ผ๋ก ์ปดํ์ผ ๋จ๊ณ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ ์ฌ์ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํด์ฃผ๊ธฐ๋ ํ๋ค.
โ๏ธ ๋์ด๊ฐ๊ธฐ ์ ์ ์ ๊น!
lateinit
์ ๊ฒฝ์ฐ์๋ ๊ณ์ํ์ฌ ๊ฐ์ด ๋ณ๊ฒฝ๋ ์ ์๋ค๋ ์์ฑ์ ์ํด ๋ฌด์กฐ๊ฑดvar
์ ์ฌ์ฉํด์ผ ํ๋ฉฐ, Primitive Type (Int, Float, Double, Long ๋ฑ) ์๋ ์ฌ์ฉํ ์ ์๋ค.
by lazy
๋ง์ฐฌ๊ฐ์ง๋ก ์ฝ๋๋ฅผ ๋จผ์ ์ดํด๋ณด๋๋ก ํ์.
fun main() {
lateinit var text: String
val textLength: Int by lazy {
text.length
}
// ๋์ถฉ ์ค๊ฐ์ ๋ญ๊ฐ ํ์
text = "H43RO_Velog"
println(textLength)
}
๋ชจ์์๋ฅผ ๋ณด๋, by lazy
๊ตฌ๋ฌธ์ ํตํด ์ด๋ค ์์ฑ์๋ฅผ ๋ฃ์ด์ค ๋ชจ์์ด๋ค. ๊ทธ๋ฐ๋ฐ ์์ธํ ๋ณด๋ฉด lateinit
์ด๋ผ์ ์์ง ์ด๊ธฐํ๊ฐ ๋์ง ์์ text
์ ์์ฑ์ ํ์ฉํ ๋ชจ์ต์ ๋ณผ ์ ์๋ค.
by lazy
๋ ์ ์ธ ๋น์์๋ ์ด๊ธฐํ๋ฅผ ํ ๋ฐฉ๋๊ฐ ์์ง๋ง, ์ดํ์ ์์กดํ๋ ๊ฐ๋ค์ด ์ด๊ธฐํ ๋ ์ดํ์ ๊ฐ์ ์ฑ์๋ฃ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค. ์ฆ, 'ํธ์ถ ์'์ ์ด๋ฅผ ์ด๋ป๊ฒ ์ด๊ธฐํ๋ฅผ ํด์ค ์ง์ ๋ํ์ฌ ์ ์ํ ์ ์๋ ๊ตฌ๋ฌธ์ด๋ค.
๋ฐ๋ผ์ text
๊ฐ ์ด๊ธฐํ ๋ ์ดํ์ textLength
๋ฅผ ์ถ๋ ฅํ ๋ text.length
์์ฑ์ ์ฌ์ฉํ์ฌ textLength
๋ผ๋ ๋ณ์๋ฅผ ์ด๊ธฐํ ํ ์ ์๋ค.
์ ์ธ๋ถ๋ฅผ ์์ธํ ๋ณด๋ฉด, val
๋ก ์ ์ธ์ด ๋์ด์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด๋ ๋จ ํ ๋ฒ์ ๋ฆ์ ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง๊ณ ์ดํ์๋ ๊ฐ์ด ๋ถ๋ณํจ์ ๋ณด์ฅํ๋ค.
๐ก Tip
์๋๋ก์ด๋์์ ์ด์ ์กํฐ๋นํฐ์์ ๋์ด์จ Intent Bundle Extra ๋ฑ์ ํ์ฌ ์กํฐ๋นํฐ ๋ฉค๋ฒ ๋ณ์์
by lazy
๋ก ๋ฐ์์, ์ ์ธํด๋๊ณ ์ฌ์ฉ ์์intent.extra
๋ฑ์ผ๋ก ๋ฒ๋ค์ ๋ฏ์ด๋ณผ ์ ์๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์๋ช ์ฃผ๊ธฐ๋ฅผ ์๋ฐํ์ง ์๊ณ ์์ ํ๊ฒ ํด๋์ค ์ ์ญ์์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ ๊ฐ๊ณ ์ฌ ์ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ ๋ค '๋ฆ์ ์ด๊ธฐํ' ๋ฅผ ํ๊ธฐ ์ํ ๋
์์ด๋ค. ๋ณธ์ง์ ์ธ ๋ชฉ์ ์ ๋น์ทํ๋ค.
ํ์ง๋ง ๊ฐ๋ณ์ฑ์ ๊ดํ ํน์ฑ์ด ๊ฐ๋ฆฌ๋ฉฐ, ์ด์ ๋ฐ๋ผ ์ฉ๋ฒ์ ๊ตฌ๋ถํ์ฌ ์ฌ์ฉํ๋ค.
lateinit
: ์๊ฐ๋ฅ (var
์ฌ์ฉ)by lazy
: ใดใด ใ
ใ
(val
์ฌ์ฉ)lateinit
: ์ด๊ธฐํ ์ดํ์ ๊ณ์ํ์ฌ ๊ฐ์ด ๋ฐ๋ ์ ์์ ๋by lazy
: ์ด๊ธฐํ ์ดํ์ ์ฝ๊ธฐ ์ ์ฉ ๊ฐ์ผ๋ก ์ฌ์ฉํ ๋
์ด๊ฑฐ ์ ๋ง ์ ํํ ์๊ณ ์ถ์๋๋ฐ, ๊ฐ์ฌํฉ๋๋ค.