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
'Kotlin' 카테고리의 다른 글
[코틀린] 반복문 (0) | 2020.09.19 |
---|---|
[코틀린] 조건문 (0) | 2020.09.19 |
[코틀린] 프로퍼티의 접근 (0) | 2020.09.18 |
[코틀린] 정보은닉, 캡슐화 그리고 가시성 지시자 (0) | 2020.09.18 |
[코틀린] 인터페이스 (Interface) (0) | 2020.09.18 |
댓글