개발하다 lateinit을 쓸 지, by lazy를 쓸 지 뭐가 맞는지 이야기가 나왔다.
그래서 정리하는 글
var a: String? = null
a = "Hello World!"
자 우선 이 코드를 보면 얘도 늦게 초기화 한다. a를
생각해보면 kotlin은 nullsafe인데 왜 이렇게 코딩할까
그래서 lateinit이나 by lazy를 사용한다.
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...)에는 사용하지 못한다.
이전 글에서 썻 듯이 일단 얘는 메모리를 많이 쓴다.
private val appBarConfiguration: AppBarConfiguration by lazy { AppBarConfiguration(navController.graph, binding.drawerLayout) }
}
by lazy는 이렇게 쓴다.
얘는 val을 사용한다. 읽기 전용에만 쓰면 될 것이다.
변경 가능한 값 -> lateinit
변경 불가능 값 -> by lazy
메모리 많이 쓰는 놈 -> by lazy