코틀린 lateinit과 lazy의 차이점이란?

HEETAE HEO·2022년 6월 23일
1
post-thumbnail
post-custom-banner

제목의 2가지는 변수를 늦게 초기화하는 방법들이다.

늦은 초기화

클래스 안에서 이 변수를 사용할 것이다 라고 선언만 해 놓고 나중에 해당 변수를 사용하는 시점에서 값을 입력해주어서 사용하는 것을 말합니다.

그냥 처음부터 null 값을 넣고 나중에 제대로 된 값을 넣으면 안되나요?

이것도 방법중 하나가 될 수 있습니다. 하지만
2가지 걸리는 상황이 있을 수 있습니다.

var a : String? = null
  1. a의 값이 변할 수는 있지만 절대 null이어서는 안되는 경우 -> 처음에 nullable한 <String?>으로 초기화해주는 것이 부적절함

  2. a의 값이 처음 한 번만 청해지면 다시는 변하지 않는 경우 a가 var일 필요가 없습니다 .

이러한 걱정을 없애주는 문법이 lateinit과 by lazy입니다.

lateinit

lateinit 문법은 다음과 같은 특징이 있습니다.

  • var 프로퍼티에서 사용가능

  • null을 허용하지 않음

  • get(),set() 사용이 불가능함

  • 생성자에서 사용 불가능

lateinit var a : String

a = "lateinit"

println(a)

위와 같이 변수 앞에 lateinit 키워드를 붙이고 변수의 자료형을 명시해줍니다. lateinit은 mutable 변수에만 사용이 가능하기 때문에 var 타입의 변수에서만 사용이 가능합니다.

by lazy

by lazy 문법은 다음과 같은 특징이 있습니다.

  • val 프로퍼티에서 사용 가능

  • get(), set() 사용이 불가능함

  • null을 허용함

  • 생성자에서 사용 불가능

val a : String by lazy {"bylazy"}
println(a)

처음에는 val 형태의 a가 사용될 것이며 사용되는 첫 순간에 a 변수에 값이 들어가는 동작이 실행이 됩니다.

lateinit vs by lazy

1, 처음 초기화 된 직후부터 계속 read-only로만 사용한다면 by lazy를 사용하고

  1. 초기화 이후에 값의 변화가 생길 수 있다면 lateinit을 사용하는 것이 좋습니다.
profile
Android 개발 잘하고 싶어요!!!
post-custom-banner

0개의 댓글