[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는 주의해서 사용해야 한다. 최초 호출되는 시점에 초기화 작업이 일어나기 때문에
초기화하는 데 사용하는 리소스가 너무 크면(메모리를 많이 쓰거나 코드가 복잡한 경우), 전체 처리 속도에 나쁜 영향을 미칠 수 있다.
반응형