반응형
1. lateinit
lateinit 키워드는 '늦은 초기화' 라고도 부르며, 초기화를 나중에 할수 있게 해주는 키워드 입니다.
var name : String = "taein"
fun main(args: Array<String>) {
println("초기화 됨, name : $name")
}
출력 결과
var name : String // 컴파일 에러 뜸
fun main(args: Array<String>) {
println("초기화 됨, name : $name")
}
컴파일 에러
위와 같이, 초기화를 해주지 않았으므로, 컴파일 에러가 발생 합니다.
lateinit var name : String // 컴파일 됨
fun main(args: Array<String>) {
println("초기화 됨, name : $name")
}
출력 결과
위 코드는 컴파일은 되지만, 런타임 시에 UninitializedPropertyAccessException이 출력 됩니다. 초기화를 해주지 않았기 때문 입니다.
lateinit var name : String
fun main(args: Array<String>) {
name = "taein"
println("초기화 됨, name : $name")
}
출력 결과
lateinit을 사용하여 초기화를 미루고, main 함수에서 초기화 해주는 것을 확인 할수 있습니다. 정상적으로 출력 됩니다.
2. lateinit 키워드를 사용 못하는 경우
// 컴파일 성공
class User2 {
lateinit var name: String
}
위 소스코드는 컴파일 성공 합니다.
// 컴파일 실패
class User3(lateinit var name : String) {}
클래스 생성자 프로퍼티로 lateinit 키워드를 사용할 수 없습니다.
// 컴파일 실패
class User4 {
lateinit var name : String?
}
Nullable 변수에는 lateinit 키워드를 사용할 수 없습니다.
// 컴파일 실패
class User5 {
lateinit val name: String
}
val 상수로는 lateinit 키워드를 사용할수 없습니다.
// 컴파일 실패
class User6 {
lateinit var name: Int
}
Int, Double, Float, Long, Int, Short, Byte, Boolean 타입에는 lateinit 키워드를 사용할수 없습니다.
반응형
'코틀린' 카테고리의 다른 글
Kotlin 코루틴(Coroutine) (0) | 2020.12.07 |
---|---|
코틀린 SAM 변환이 왜 되지 않을까? (0) | 2020.11.25 |
코틀린 5편 (data class, object, companion object) (0) | 2020.11.11 |
코틀린 4편 (람다 Lamda) (0) | 2020.11.11 |
코틀린 3편 (클래스 생성자와 상속) (0) | 2020.11.10 |