코틀린

코틀린 6편 (lateinit)

태인킴 2020. 11. 13. 00:47
반응형


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 키워드를 사용할수 없습니다.

반응형