lateinit
와 lazy
모두 변수를 늦게 초기화하는 방법들이다.
늦게 초기화 한다는 것이 무엇일까?
늦은 초기화
클래스 안에 ‘이 변수를 사용할 것이다’라고 선언만 해두고 나중에 변수를 실제로 사용하는 시점에 값을 입력해주어 사용하는 것을 말한다.
물론 처음부터 null값을 넣어두고 나중에 제대로 된 값을 할당하는 것도 가능하다. 하지만 이럴 경우 2가지 고려해볼 요소가 있다.
var a : String? = null
- a의 값이 변할 수 있지만, 절대 null이면 안되는 경우
⇒ 처음에 nullable한 <String?>으로 초기화해주는 것이 부적절하다.
- a의 값이 처음 한 번 정해지고 나면, 다시는 변하지 않는 경우
⇒ a가 var일 필요가 없다.
이런 걱정을 없에주는 것이 lateinit과 lazy이다.
lateinit
특징
- var 프로퍼티에서 사용 가능
- null을 허용하지 않음.
- get(), set() 사용 불가능
- 생성자에서 사용 불가능
lateinit var a : String
a = "lateinit"
println(a)
위와 같이 변수 앞에 lateinit
키워드를 붙이고 변수의 자료형을 명시한다.
lateinit는 mutable 변수에만 사용이 가능하므로, var타입 프로퍼티에서만 사용이 가능하다.
by lazy
특징
- val 프로퍼티에서 사용 가능
- get(), set() 사용이 불가능
- nullable
- 생성자에서 사용 불가능
private val binding by lazy{
ActivityMainBinding.inflate(layoutInflater)
}
사용 팁
처음 초기화 된 직후부터 계속 read-only로 사용된다면, by lazy가 좋다.
초기화 이후 값의 변화가 생길 수 있다면, lateinit를 사용하는 것이 좋다.
Uploaded by N2T
'Kotlin > Basic' 카테고리의 다른 글
가변 인자 목록: vararg (0) | 2023.12.03 |
---|---|
[Kotlin] object & companion object (0) | 2023.01.19 |
[Kotlin] 내부(Inner class)와 중첩 클래스(Nested class) (0) | 2023.01.11 |
[Kotlin] 더블콜론(::) 참조 (0) | 2023.01.10 |
[Kotlin] 지연 계산(lazy) 컬렉션 연산: Sequence (1) | 2023.01.10 |