반응형

이 게시물은 다음 링크를 참조하여 학습했습니다

 

Kotlin - lateinit과 lazy로 초기화를 지연하는 방법

kotlin lateinit과 lazy는 코틀린에서 프로퍼티 초기화를 늦추는 키워드입니다. 초기화 지연은 사용할지 모르는 데이터를 미리 초기화할 필요가 없어서 성능 향상에 도움이 됩니다. 코틀린에서 제공

codechacha.com

 

[내 맘대로 정리한 Kotlin] lateinit과 by lazy의 차이점

늦은 초기화 가끔 클래스 안에서 '내가 이 변수를 쓸 것이다'라고 선언만 해 놓고, 나중에 값을 사용할 수 있게 되면 그 때 값을 입력해 주고 싶을 때가 있다. 이럴 때 사용 가능한 방법 중에는 아

holika.tistory.com

 

kotlin은 변수 타입이 기본적으로 non-null 타입이기 때문에 nullable타입으로 변경해주지 않는 한 선언과 동시에 값을 초기화해줘야 한다.

var x : String? = null

하지만 nullable로 설정해주게 되면 다음과 같은 경우에 문제가 발생할 수도 있다.

  • 값이 변할수도 있지만, null이어서는 안되는 경우 -> non-null타입으로 지정해주는게 바람직함
  • 값이 처음 한번만 지정해주면 되는 경우 -> 변수가 var일 필요가 없음

이럴 때를 위해 제공되는 문법이 lateinit, lazy이다.

 

1. lateinit

lateinit은 아래처럼 사용한다.

lateinit var x : String 
x = "Hello World!" 
println(x)

lateinit은 다음과 같은 특징을 갖는다.

  • var 프로퍼티만 사용 가능
  • primitive type(Int, Boolean 등)은 사용할 수 없음
  • Custom getter/setter를 만들 수 없음
  • Non-null 프로퍼티만 사용 가능

 

2. lazy

lazy는 아래처럼 사용한다.

val x : String by lazy { "Hello World!" } 
println(x)
lateinit var inputValue : String 
val x : Int by lazy { inputValue.length } 
inputValue = "Hello World!" 
println(x)

 

lazy는 다음과 같은 특징을 갖는다.

  • val 프로퍼티만 사용 가능
  • primitive type(Int, Boolean 등)도 사용 가능
  • Non-null, Nullable 모두 사용 가능
반응형

'Legacy' 카테고리의 다른 글

[Kotlin #11] Coroutines  (0) 2022.06.09
[Kotlin #10] Null Safety  (0) 2022.06.02
[Kotlin #8] Companion Object  (0) 2022.05.24
[Kotlin #7] Sequences  (0) 2022.05.23
[Kotlin #6] 확장 함수(Extension Functions)  (0) 2022.05.23

+ Recent posts