[Android]/[Kotlin]

코틀린 심화문법 - 지연 초기화

Hevton 2023. 1. 11. 22:34
반응형

 

 

코틀린은 지연 초기화를 사용한다.

 

 

class에서 변수를 초기화하면, 클래스 생성 시 해당 변수도 함께 생성되며 초기화된다.

그렇게 되면 클래스 객체를 생성할 때마다 해당 변수도 함께 초기화되기 때문에 바로 사용할 수 있다는 장점이 있다.


하지만 해당 변수를 바로 사용하지 않거나 꼭 사용하는 경우가 아니라면 클래스를 생성할 때마다 변수를 초기화하기 때문에 메모리나 소프트웨어의 실행 시간 측면에서 손해를 많이 보게 될 것!


초기화를 최대한 미루어서 메모리나 실행 시간에서 이득을 보기 위해 사용한다는 것이다.

 

 

지연 초기화에는 두 가지 방법이 있다.

 

 

lateinit 

- var 에만 사용이 가능

- null은 허용되지 않음

- primitive type은 사용 불가능

- 초기화 되었는지 체크를 사용한다

class Sample {

    // lateint var age: Int => primitive type 사용 불가능
    lateinit var name: String

    fun hello() {
        if(::name.isInitialized) {
            // 초기화 되었다면
        }
    }
}

 

 

 

lazy

- val에만 사용 가능 = 값 교체 불가능

- primitive type에도 사용 가능

-> 일반 대입과 다른 점은, 처음 사용될 떄 초기화된다.

class Sample {
    
    val age: Int by lazy { 25 }
    
    fun hello() {
        
        print(age) // 최초 호출하는 시점에 초기화된다.
    }
}

 

lazy는 주의해서 사용해야 한다. 최초 호출되는 시점에 초기화 작업이 일어나기 때문에

초기화하는 데 사용하는 리소스가 너무 크면(메모리를 많이 쓰거나 코드가 복잡한 경우), 전체 처리 속도에 나쁜 영향을 미칠 수 있다.

반응형