본문 바로가기

카테고리 없음

LATEINIT & BY LAZY

LATEINIT & BY LAZY


lateinit : 늦은 초기화

by lazy : 게으른 초기화 (프로퍼티 위임 초기화)

class Player{
var nick: String


}


위와 같은 코드가 있다고 생각해보자 이 코드는 에러가 난다. 왜 ?? 


kotlin에서 필드맴버는 반드시 초기화를 시켜줘야 하기때문에 


var nick: String = ""

이런식이나


var nick: String 

init {
nick = "aaa"
}


이런식으로 init 블럭에 초기화를 해주어야 한다.


또는 nullable을 사용해야 하는데 불필요한 nullable을 사용할 이유또한 없다.



lateinit var nick: String


그래서 쓰는것이 lateinit이다 언젠가는 초기화를 하겠다 라는것이다. 초기화전에 변수를 참조하면 당연히 예외가 발생한다.



by lazy는 함수형 초기화 블록으로써 해당 변수가 처음 참조 될때 초기화 블록이 초기화를 시킨다.



val name : String by lazy {
println("my name is ")
"choi"
}


이 두가지를 쓰는이유는 null 처리의 복잡도도 줄일수 있고 불필요한 메모리를 사용하지 않아도 된다.




lateinit : 늦은 초기화 


- var(mutable) 변수 초기화를 의도적으로 지연시키는 방법


- nullable에서도 null로선언과 동시에 초기화 하지 않고 ,init{} 에서 초기화 하지 않아도 된다.


- 해당 property를 사용하고자 할 때 초기화를 진행하고 바로 사용할 수 있다.(초기화 안하고 접근시 예외발생)



by lazy : 게으른 초기화 (프로퍼티 위임 초기화)


- val 상수 에 지정


- property 초기화를 위한 위임 블록을 지정하여 맨 처음 참조시 단 한번의 초기화를 진행하는 방법


- 맨 처음 참조시에 값을 얻게 되므로 null처리가 전혀 불필요함.