lateinit으로 선언된 프로퍼티는 기본 타입(Int, Long, Double 등)으로 선언할 수 없습니다. 오직 클래스 타입 프로퍼티만 늦은 초기화가 가능합니다.
lateinit 프로퍼티는 var로 선언되어야 합니다. 즉, 변경 가능한 변수로 선언되어야 하며 val로는 사용할 수 없습니다.
lateinit 프로퍼티를 사용하기 전에 반드시 초기화가 되어야 합니다. 그렇지 않으면 "lateinit property has not been initialized"과 같은 예외가 발생합니다.
초기화 전에 프로퍼티에 접근하려면 프로퍼티 타입에 대한 기본값이 아니어야 합니다. 기본값으로 초기화하는 것이 필요한 경우 lateinit을 사용할 수 없습니다
// 코틀린 코드를 이해하기 쉽게 설명해줄게!
// 이 클래스는 "늦은 초기화"를 사용하는 놀이터 예제야.
class 놀이터 {
// 놀이터에 있는 친구의 이름을 저장하는 변수야.
// 우리는 처음에 이 친구의 이름을 모르지만, 나중에 놀이터에서 만나서 이름을 알게 될 거야!
lateinit var 친구이름: String
// 친구의 이름을 초기화하는 함수야.
fun 이름설정() {
// 이 함수에서 우리는 친구의 이름을 "존 도우"로 설정해줄 거야.
친구이름 = "존 도우"
}
// 친구의 이름을 출력하는 함수야.
fun 이름출력() {
// 친구의 이름이 초기화되었는지 확인하는 거야.
// 만약 초기화가 안 되어있으면 "아직 이름을 모르겠어요!"라고 출력할 거야.
if (::친구이름.isInitialized) {
// 초기화가 되어있으면 친구의 이름을 출력해줄 거야.
println(친구이름)
} else {
println("아직 이름을 모르겠어요!")
}
}
}
fun main() {
// 놀이터 클래스를 사용해서 놀이터 객체를 만들어줄 거야.
val 놀이터객체 = 놀이터()
// 아직 우리는 놀이터 친구의 이름을 모르지만, 이름을 설정하는 함수를 호출해서 "존 도우"로 설정해줄 거야.
놀이터객체.이름설정()
// 이제 우리는 놀이터 친구의 이름을 알게 되었어요!
// 그래서 이름을 출력하는 함수를 호출하면 "존 도우"가 출력될 거야.
놀이터객체.이름출력()
}