선언된 변수나 클래스 멤버 변수는 선언과 동시에 초깃값 할당 해야함
val data1: Int // 오류
val data2 = 10 // 성공
class User {
val data3: Int // 오류
val data5: Int = 10 // 성공
}
함수의 경우 선언과 동시에 할당하지 않아도 되지만, 이용시 에는 값을 할당해야함
fun someFun() {
val data1: Int
println("data1 : $data1") // 오류
data1 = 10
println("Data1 : $data1") // 성공
}
초기화 미루기 ( lateinit , lazy)
lateinit
- lateinit은 var 키워드로 선언한 변수에만 사용할 수 있습니다.
- Int, Long, Short, Double, Float, Boolean, Byte 타입에는 사용할 수 없습니다.
lateinit var data1: Int // 오류
lateinit val data2: String // 오류
lateinit var data3: String // 성공
선언한 변수는 선언과 동시에 초깃값을 할당하지 않아도 됩니다.
lazy
- 변수 선언문 뒤에 by lazy {} 형식으로 선언
- 변수가 최초로 이용되는 순간 {} 부분이 자동 실행 초깃값으로 할당
val data4: Int by lazy {
println("in lazy.....")
10
}
fun main(){
println("in main...")
println(data4 + 10)
println(data4 + 10)
}
실행결과
in main... in lazy..... 20 20 |
중괄호 부분을 여러 줄로 작성한다면 마지막 줄의 실행 결과가 변수의 초깃값이 됩니다.