Kotlin by lazy와 lateinit의 차이점

98oys·2022년 7월 2일
0

language

목록 보기
3/9
post-custom-banner

😁결론부터 말하자면

  • by lazy : 선언 시점에 초기화 O, 값 변경 X
  • lateinit var : 선언 시점에 초기화 X, 값 변경 O

우리가 어떤 변수를 사용해야할 때, 그 변수를 바로 정의하기 어려울 때가 있습니다.

var apple: Int?= null

변수를 선언과 동시에 null로 초기화를 하고 나중에 필요할 때 초기화해주면 쉽게 정의할 수 있습니다.

하지만 굳이 위험하게 null로 초기화하는 것은 좋아보이진 않습니다.

이럴 때 우리는 늦은 초기화를 사용하면 됩니다.😋

늦은 초기화라고 하는 말은, 말 그대로 객체 초기화를 늦게하는 것 입니다!

🐦lateinit var

fun main() {
    lateinit var fruit: String
    
	...
    
    fruit = "apple"
    ...
    fruit = "orange"
}

lateinit을 사용하여 fruit 변수를 선언하고, 이후에 어떠한 동작 이후에 fruit를 apple로 초기화 해주었습니다.
var로 선언되어있기 때문에 언제든지 값을 변경할 수 있습니다.

만약 lateinit을 안써준다면 Android Studio가 친절하게 Property must be initialized or be abstract라는 에러메시지를 띄워줍니다! 😂 꼭 초기화합시다!

🐜 by lazy

fun main() {
    val fruit: String by lazy {
        "apple"
    }

//    fruit = "orange"
}

by lazy는 변수를 선언과 동시에 초기화하는 키워드입니다.

그리고 호출 시 변수를 초기화 해줄 지에 대하여 정의할 수 있는 구문이다.

선언부 보면, fruit 변수가 val로 선언이 되어있어 단 한 번의 늦은 초기화가 이루어지고 이후에는 값이 불변함을 보장합니다 🤐

profile
Android Developer, Department of Information and Communication Engineering, Inha University
post-custom-banner

0개의 댓글