lateinit vs by lazy

이창민·2022년 6월 16일
0

늦게 초기화하기

개발하다 lateinit을 쓸 지, by lazy를 쓸 지 뭐가 맞는지 이야기가 나왔다.
그래서 정리하는 글

var a: String? = null
a = "Hello World!"

자 우선 이 코드를 보면 얘도 늦게 초기화 한다. a를
생각해보면 kotlin은 nullsafe인데 왜 이렇게 코딩할까
그래서 lateinit이나 by lazy를 사용한다.

lateinit

private lateinit var appBarConfiguration: AppBarConfiguration

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
 		
        // ...
        appBarConfiguration = AppBarConfiguration(navController.graph, binding.drawerLayout)
}

lateinit은 이런 식으로 나중에 초기화를 해준다.
초기화를 안하면 컴파일시 오류를 맛보게 될 수 있다.
var이라서 나중에 값을 바꿀 수 있다.

lateinit은 Primitive type(int, float...)에는 사용하지 못한다.

by lazy

이전 글에서 썻 듯이 일단 얘는 메모리를 많이 쓴다.

private val appBarConfiguration: AppBarConfiguration by lazy { AppBarConfiguration(navController.graph, binding.drawerLayout) }
}

by lazy는 이렇게 쓴다.
얘는 val을 사용한다. 읽기 전용에만 쓰면 될 것이다.

정리

변경 가능한 값 -> lateinit
변경 불가능 값 -> by lazy

메모리 많이 쓰는 놈 -> by lazy

profile
android 를 공부해보아요

0개의 댓글