Lateinit
클래스 내에서 변수만 Nullable로 미리 선언하고 초기화를 나중에 해야 하는 경우 lateinit 키워드를 사용한다.
var tmp: String? = null
tmp?.plus("1")
위와 같이 null 값으로 변수를 선언할 수 있지만, 이 경우 tmp 변수를 사용하고자 하는 모든 곳에 Safe Call(?.)을 붙여줘야해서 가독성이 저하될 수 있다.
이때 lateinit을 사용하여 변수를 선언하면 Safe Call을 사용할 필요가 없어 가독성이 높아진다.
lateinit var tmp: String
tmp.plus("1")
lateinit 특징
1. var로 선언된 클래스의 프로퍼티에만 사용 가능
2. null값은 허용되지 않음
3. 기본 자료형(int, Long, Double, Float 등) 사용 불가
4. 초기화 하지 않고 변수 접근 시, NullPointerException 발생하여 앱 강제 종료 발생(매우 주의!)
lateinit NullPointerException 방지
lateinit 타입의 변수 사용시 NullPointerException으로 앱이 강제 종료되는 것을 막기 위해, 초기화전에 해당 변수에 접근하게 되는 경우가 있다면(ex. onPause, onStop 등) 반드시 초기화 여부를 체크한 뒤에 해당 변수에 접근해야 한다.
lateinit var tmp: String
if(this::tmp.isInitialized) {
// tmp 변수 접근
}
반응형