1) 초기화 지연

초기화 지연 : lateinit, lazy

정의: 변수를 선언할 때 값을 지정하지 않고, 나중에 지정할 수 있는 방법

목적: 메모리를 효율적으로 사용하기 위해서, null safe 한 value 를 사용하기 위해서

 

2) lateinit, var

  • 변수 타입을 지정해줘야 함
  • Primitive 타입은 사용할 수 없음
  • 선언 후, 나중에 초기화 해줘도 됨
lateinit var text :String // 선언 ( 타입 지정해주어야 함)
// lateinit var age : Integer // Int ( primitive type 는 lateinit 불가능 )
                              // 참조타입은 lateinit 가능

fun main() {
    // text 초기화 되기 전에, text 에 접근하면
    // lateinit property text has not been initialized 오류 발생
    
    text = "name" // 초기화
    // age = Integer(10)

    print(text)

}

3) lazy, val

  • 선언과 동시에 초기화를 해야 함
  • 호출시점에 초기화가 이루어짐
val test : Int by lazy {
    println("초기화 중")
    100 // test 를 호출하는 시점에 초기화
}

fun main() {

    println("메인 함수 실행")
    println("초기화 한 값 $test")
    println("두번째 호출 $test")

}

 

lazyinit 은 lateinit과 달리 선언과 함께 초기화를 해주어야한다는 차이점이 있다.

+ Recent posts