코틀린에서는 변수를 선언할 때 즉시 초기화를 해야 하는데, 때로는 초기화를 뒤로 미루고 싶은 경우가 있습니다. 이때 사용하는 것이 지연 초기화입니다.
lateinit은 'late initialization'의 약자로, 변수를 선언할 때 초기화하지 않고, 추후에 초기화하는 기능입니다.
lateinit 키워드를 사용하여 변수를 선언할 때 초기화를 하지 않아도 되는 장점이 있습니다. 이는 예를 들어, 객체의 생성자에서 초기화할 수 없는 경우에도 사용할 수 있습니다.
lateinit var name: String
fun initializeName() {
name = "John"
}
위 코드에서는 lateinit으로 선언된 name 변수를 선언할 때 초기화하지 않았습니다. 대신, 추후 initializeName() 함수를 호출하여 name 변수를 초기화합니다.
class Person{
var name: String? = null
init{
name = "Lionel"
}
fun process() {
name?.plus("Messi")
print("이름의 길이 = ${name?.legth}")
print("이름의 첫 글자 = ${name?.substring(0,1}")
}
}
lazy는 변수를 최초로 사용할 때에만 초기화하는 기능입니다. 이를 통해 불필요한 초기화를 하지 않고 성능을 높일 수 있습니다.
val name: String by lazy {
println("초기화")
"John"
}
fun main() {
println(name)
println(name)
}
위 코드에서는 name 변수를 선언할 때 lazy 키워드를 사용하여 초기화를 뒤로 미루었습니다. 따라서, name 변수를 최초로 사용할 때에만 초기화가 수행됩니다.
이를 통해, 성능이 더 중요한 상황에서 lazy를 사용하여 불필요한 초기화를 줄일 수 있습니다.