반응형
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로 선언한 프로퍼티에만 사용 가능
- 클래스 몸체 이외에 최상위 레벨에서 사용 가능
- 기초 타입에도 사용 가능
반응형
'프로그래밍 > Kotlin' 카테고리의 다른 글
[ Kotlin ] 코틀린 val , var 이란? 그리고 차이점 (0) | 2021.11.03 |
---|---|
[ Kotlin ] 코틀린(Kotlin)에서 Null 을 안전하게 처리하는 방법 (1) | 2021.10.26 |
[ Kotlin ] 코틀린 Null 안전성이란? (Null Safety) (1) | 2021.10.25 |