본문 바로가기
Kotlin

[코틀린] 지연 초기화 (lateinit, lazy)

by Sky Titan 2020. 9. 18.
728x90

lateinit

- 클래스 선언 시 컴파일러에서 프로퍼티의 선언을 null로 허용하지 않지만 lateinit을 사용하면 허용됨

-바로 초기화 안해도 된다.

  1. var로 선언된 프로퍼티만 가능
  2. getter, setter 사용 불가능

 

기존

class Test{

//선언과 동시에 초기화
    var age : Int = 5 
    var name : String

//init 블록을 이용한 초기화
    init {
        name = "test"
    }
}

 

lateinit 사용

class Test{

    lateinit var name : String
    
    fun testMethod()
    {
        name = "지연초기화"
    }

}

 

lazy

- val로 선언한 객체도 지연 초기화 가능

- 람다식으로 구성되어 lazy 인스턴스 반환값을 가지는 함수

  1. 호출 시점에 by lazy{ ~ } 를 정의 하여 블록 부분 초기화 진행
  2. val만 사용 가능
class Test{

    val name :String by lazy { 
        "lazy 반환값"
    }
    
    fun test(){
        println("최초 초기화 시점 $name")
    }
    
}

 

객체 지연 초기화

class Test2(val age:Int, val name:String){

}

fun main() {
    var isTestInitiated = false    


    val test2 : Test2 by lazy{
        isTestInitiated = true
        Test2(15,"이름")
    }

}

 

728x90

'Kotlin' 카테고리의 다른 글

[코틀린] 반복문  (0) 2020.09.19
[코틀린] 조건문  (0) 2020.09.19
[코틀린] 프로퍼티의 접근  (0) 2020.09.18
[코틀린] 정보은닉, 캡슐화 그리고 가시성 지시자  (0) 2020.09.18
[코틀린] 인터페이스 (Interface)  (0) 2020.09.18

댓글