선언된 변수나 클래스 멤버 변수는 선언과 동시에 초깃값 할당 해야함

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

중괄호 부분을 여러 줄로 작성한다면 마지막 줄의 실행 결과가 변수의 초깃값이 됩니다.

+ Recent posts