2024. 3. 8. 20:48, ๐ฑAndroid Study
๋ฐ์ํ
9 ์ง์ฐ ์ด๊ธฐํ (lateinit, lazy)
lateinit
- ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ํด๋์ค ์์์ ๋ณ์๋ง Nullable๋ก ๋ฏธ๋ฆฌ ์ ์ธํ๊ณ ์ด๊ธฐํ๋ฅผ ๋์ค์ ํด์ผ ํ ๊ฒฝ์ฐ๊ฐ ์์
- ์ด๋ด ๊ฒฝ์ฐ lateinit ํค์๋๋ฅผ ์ฌ์ฉ
Nullable๋ก ์ ์ธํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ
class Person {
var name: String? = null
init {
name = "Lionel"
}
fun process() {
name?.plus(" Messi")
print("์ด๋ฆ์ ๊ธธ์ด = ${name?.length}")
print("์ด๋ฆ์ ์ฒซ ๊ธ์ = ${name?.substring(0, 1)}")
}
}
- ์ผ๋ฐ์ ์ธ ์ ์ธ ๋ฐฉ์์ผ๋ก ์ฒ์์ ?๋ก null ๊ฐ์ ์ ๋ ฅํด๋๊ณ , ํด๋์ค์ ๋ค๋ฅธ ๋ฉ์๋ ์์ญ์์ ๊ฐ์ ์ ๋ ฅ
- ๋ณ์์ ์ ๋ ฅ๋ ๊ฐ์ ๋ฉ์๋๋ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ ๋ Safe Call(?.)์ด ๋จ์ฉ๋์ด ๊ฐ๋ ์ฑ์ ๋จ์ดํธ๋ฆฌ๋ ๊ฒ ๋ฌธ์ ์
lateinit์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
class Person {
lateinit var name: String
init {
name = "Lionel"
}
fun process(){
name.plus(" Messi")
print("์ด๋ฆ์ ๊ธธ์ด = ${name.length}")
print("์ด๋ฆ์ ์ฒซ ๊ธ์ = ${name.substring(0, 1)}")
}
}
- lateinit์ ์ฌ์ฉํ๋ฉด Safe Call์ ์ฐ์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ ์ฝ๋์์ ๋ฐ์ํ ์ ์๋ ์๋ง์ ?๋ฅผ ๋ฐฉ์ง, ๊ฐ๋ ์ฑ Good
- lateinit์ ํน์ง
(1) var๋ก ์ ์ธ๋ ํด๋์ค์ ํ๋กํผํฐ์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
(2) null์ ํ์ฉ๋์ง ์์
(3) ๊ธฐ๋ณธ ์๋ฃํ Int, Long, Double, Float ๋ฑ์ ์ฌ์ฉํ ์ ์์ - lateinit์ ์ฌ์ฉํ ๋ ์ฃผ์ํ ์
- lateinit์ ๋ณ์๋ฅผ ๋ฏธ๋ฆฌ ์ ์ธ๋ง ํด ๋์ ๋ฐฉ์
- ๋ฐ๋ผ์ ์ด๊ธฐํ๋์ง ์์ ์ํ์์ ๋ฉ์๋๋ ํ๋กํผํฐ๋ฅผ ์ฐธ์กฐํ๋ฉด null ์์ธ๊ฐ ๋ฐ์ํด์ ์ฑ์ด ์ข ๋ฃ๋จ
- ๋ณ์๊ฐ ์ด๊ธฐํ๋์ง ์์ ์ํฉ์ด ๋ฐ์ํ ์ ์๋ค๋ฉด, Nullable์ด๋ ๋น ๊ฐ์ผ๋ก ์ด๊ธฐํํ๋ ๊ฒ์ด ์ข์
Lazy
class Company {
val person: Person by lazy { Person() }
init {
// lazy๋ ์ ์ธ ์์ ์ด๊ธฐํ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ์ด๊ธฐํ ๊ณผ์ ์ด ํ์ ์์
}
fun process(){
print("person์ ์ด๋ฆ์ ${person.name}") // ์ต์ด ํธ์ถํ๋ ์์ ์ ์ด๊ธฐํ
}
}
- lazy๋ ์ฝ๊ธฐ ์ ์ฉ ๋ณ์์ธ val์ ์ฌ์ฉํ๋ ์ง์ฐ ์ด๊ธฐํ
- lateinit์ด ์ ๋ ฅ๋ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ๋ฐ๋ฉด, lazy๋ ์ ๋ ฅ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์
- val๋ก ๋ณ์๋ฅผ ๋จผ์ ์ ์ธํ ํ ์ฝ๋์ ๋ค์ชฝ์ by lazy ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋จ
๊ทธ๋ฆฌ๊ณ by lazy ๋ค์์ ๋์ค๋ ์ค๊ดํธ { }์ ์ด๊ธฐํํ ๊ฐ์ ์จ์ฃผ๋ฉด ๋จ - ์ ์ธ ์์ ์ด๊ธฐํ ์ฝ๋๋ฅผ ํจ๊ป ์์ฑํ๊ธฐ ๋๋ฌธ์, ๋ฐ๋ก ์ด๊ธฐํ ํ ํ์๊ฐ ์์
- ๋ฐํ๋๋ ๊ฐ์ ํ์ ์ ์ถ๋ก ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ณ์์ ํ์ ์ ์๋ตํ ์ ์์
- ์ด๊ธฐํ ์์ : lazy๋ก ์ ์ธ๋ ๋ณ์๊ฐ ์ต์ด ํธ์ถ๋๋ ์์ ์ by lazy{} ์์ ๋ฃ์ ๊ฐ์ผ๋ก ์ด๊ธฐํ
์์์์ Company ํด๋์ค๊ฐ ์ด๊ธฐํ ๋๋๋ผ๋ person์ ๋ฐ๋ก Person()์ผ๋ก ์ด๊ธฐํ๋์ง ์๊ณ , process ๋ฉ์๋์์ person.name์ด ํธ์ถ๋๋ ์๊ฐ ์ด๊ธฐํ
๐ก lazy ์ฌ์ฉ์ ์ฃผ์ํด์ผ ํ๋ ์ด์
- ์ง์ฐ ์ด๊ธฐํ๋ ๋ง ๊ทธ๋๋ก ์ต์ด ํธ์ถ๋๋ ์์ ์ ์ด๊ธฐํ ์์ ์ด ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ์ด๊ธฐํ ํ๋ ๋ฐ ์ฌ์ฉํ๋ ๋ฆฌ์์ค๊ฐ ๋๋ฌด ํฌ๋ฉด(๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฐ๊ฑฐ๋ ์ฝ๋๊ฐ ๋ณต์กํ ๊ฒฝ์ฐ), ์ ์ฒด ์ฒ๋ฆฌ ์๋์ ๋์ ์ํฅ์ ๋ฏธ์น ์ ์์
- ์๋ฅผ ๋ค์ด ์์ Company ํด๋์ค์์ ์ฒ๋ฆฌํ๋ Person ํด๋์ค์ ์ฝ๋๊ฐ ๋ณต์กํ๋ฉด ๋จ์ํ person.name์ ํธ์ถํ๋ ๋ฐ ์ ์ด๊ฐ ๊ฑธ๋ฆด ์๋ ์์
- ๋ฐ๋ผ์ ๋ณต์กํ ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ํด๋์ค๋ผ๋ฉด ๋ฏธ๋ฆฌ ์ด๊ธฐํ ํด๋๊ณ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์จ์
๋ฐ์ํ
๐ฌ C O M M E N T