반응형
오늘은 Kotlin 의 lateinit 에 대해서 정리해 보도록 하겠습니다.
1. lateinit
lateinit은 키워드 자체로 설명이 되어있는데요.
초기화(initialize)가 late하게 된다는 의미를 가지고 있습니다.
이 키워드를 사용하면, 컴파일러는 변수 선언시에 초기화가 되지 않아도 아무런 에러를 보여주지 않구요.
개발자가 원하는 시점에 초기화를 할 수 있도록 해 줍니다.
게다가 lateinit 을 이용해서 선언할 경우,
onDestroy에서 null 로 다시 값을 넣어줄 필요가 없습니다.
이 객체는 자동으로 가비지콜렉터에 의해서 해당변수가 포함된 클래스가 destroy 될 때 함께 처리됩니다.
예를 들어서 아래와 같이 adView나 adRequest를 초기화 하지 않은 상태에서 미리 선언하는 것 이지요.
2. lateinit 선언시 주의할 점들
lateinit 을 사용할 때는 다음의 점들에 주의를 해야 합니다.
- null이나 nullable 한 값으로 초기화 할 수 없음
- 커스텀한 getter 나 setter 를 사용한 프로퍼티는 않됨
- val 로는 선언불가 (var 로만 선언해야 함)
한가지 주의할 점은,
초기화되지 않은 변수에 접근하게 되면,
UninitializedPropertyAccessException 을 보게 된다는 것 입니다.
따라서, 사용하는 개발자는 사용전에 초기화가 되도록 코딩을 해야합니다.
3. lateinit 이 초기화 되었는지 확인하는 방법
만약 위에서 예로 들었던, adView를 기준으로 한다면 다음과 같은 방법으로,
lateinit이 초기화 되었는지 확인하여서 UninitializedPropertyAccessException 를 미연에 방지할 수 있습니다.
if (::adView.isInitialized) {
println(foo.bar)
}
728x90
'Android 개발 > Kotlin' 카테고리의 다른 글
Kotlin GroupBy 구현과 정리 # List 그룹핑 (0) | 2023.04.28 |
---|---|
getOrNull 과 getOrElse 에 대한 정리 # List Kotlin (0) | 2023.04.28 |
Kotlin Pair 와 Map 함수 이용해서 데이터 가공하기 (0) | 2023.04.26 |
Kotlin custom getter 와 setter 구현하기 (0) | 2023.04.11 |
isNullOrEmpty 와 isNullOrBlank 의 차이점 # Kotlin (0) | 2023.04.09 |
Elvis 연산자 의 활용법 총정리 # null 체크 throw (0) | 2023.01.15 |
require 와 Check 로 코드에 조건 부여하기 # Kotlin (0) | 2023.01.14 |
Java 프로젝트에 Kotlin 추가하기 # Android Studio (0) | 2022.12.14 |
Sealed Class 총정리 feat. enum Class (0) | 2022.10.11 |
Kotlin By 키워드에 대한 이해 # Property Delegate Pattern (1) | 2022.10.11 |
댓글