프로그래밍/Kotlin

[ Kotlin ] 코틀린(Kotlin) lateinit과 by lazy

리신 2021. 10. 26. 04:37
반응형

lateinit 과 by lazy 

변수를 생성할 때, 선언만 해두거나 아니면 나중에 값을 할 당 하기 위해 변수의 값을 null로 할당할 때가 있다.

코틀린은 JAVA와 다르게 "String a = null"을 쓰지 못한다.

그래서  아래와 같이  null값을 할당할 수 있다.

 

[Code]

var a:String ?= null

하지만 문제가 발생할 수 있다.

 

- 변수의 값이 절대 null이 돼서는 안 되는 경우

 

- 값이 한번 정해지면 바뀔 수 없는 상수 일 경우

 

이 문제를 해결하기 위해 제공되는 문법이 lateinit, 그리고 by lazy이다.

 

 


lateinit 이란?


일단 변수만 선언하고 초기값의 할당은 나중에 할 수 있도록 해줌.

 

[Code]

lateinit var text: String

사용 규칙

 

  • var로 선언한 프로퍼티에만 사용할 수 있음(val 불가능)
  • 사용자 정의 getter/setter를 사용하지 않은 프로퍼티에만 사용할 수 있음
  • null 허용 프로퍼티에는 사용할 수 없음
  • 기초 타입 프로퍼티에는 사용할 수 없음(Int, Float.. 등등)

 

by lazy 이란?


by lazy를 사용한 변수가 처음 실행될 때 어떤 값으로 할당할지 정해준다.

 

말만 들었을 때는 그냥 선언과 정의가 아닌가 싶지만 아래 코드와 같은 경우 by lazy가 필요한 상황이다.

 

[Code]

lateinit var inputText : String 

val textSize : Int by lazy { inputText.length } 

inputText = "bylazy"

println(textSize)

 

inputText의 길이를 받아와야 하지만 lateinit으로 된 변수이다.

그래서 아직 inputText의 길이는 알지 못한다.

만약 inputText가 값을 가지고 난 후 textSize의 변수를 사용할 것이라면 by lazy 사용할 수 있다.

 

사용 규칙

 

  • 호출 시점에 초기화 진행
  • val로 선언한 프로퍼티에만 사용 가능
  • 클래스 몸체 이외에 최상위 레벨에서 사용 가능
  • 기초 타입에도 사용 가능

 

 

반응형