Kotlin
[코틀린] 지연 초기화 (lateinit, lazy)
Sky Titan
2020. 9. 18. 18:04
728x90
lateinit
- 클래스 선언 시 컴파일러에서 프로퍼티의 선언을 null로 허용하지 않지만 lateinit을 사용하면 허용됨
- 즉 바로 초기화 안해도 된다.
- var로 선언된 프로퍼티만 가능
- getter, setter 사용 불가능
기존
class Test{
//선언과 동시에 초기화
var age : Int = 5
var name : String
//init 블록을 이용한 초기화
init {
name = "test"
}
}
lateinit 사용
class Test{
lateinit var name : String
fun testMethod()
{
name = "지연초기화"
}
}
lazy
- val로 선언한 객체도 지연 초기화 가능
- 람다식으로 구성되어 lazy 인스턴스 반환값을 가지는 함수
- 호출 시점에 by lazy{ ~ } 를 정의 하여 블록 부분 초기화 진행
- val만 사용 가능
class Test{
val name :String by lazy {
"lazy 반환값"
}
fun test(){
println("최초 초기화 시점 $name")
}
}
객체 지연 초기화
class Test2(val age:Int, val name:String){
}
fun main() {
var isTestInitiated = false
val test2 : Test2 by lazy{
isTestInitiated = true
Test2(15,"이름")
}
}
728x90