티스토리 뷰

Kotlin

lateinit, lazy init

IT Knowledge Share 2021. 7. 9. 13:08
반응형

1. lateinit

 

코틀린에서 변수를 선언할 때, NullSafe한 타입으로 변수를 선언합니다. 이때, 제일 먼저 초기화를 해줘야 하는데, 초기화를 해주지 않는다면, 초기값이 없으므로 널값이 들어갈 수 있습니다.

 

아래의 예문을 봅니다.

//널값으로 선언 시 나중에 계속 ?를 사용하여 널값을 제거해야 하는 불편함.
var number: Int? = null

//latenit 선언으로 나중에 초기값을 정함.
lateinit var lateinitNumber: Int

//전역변수로서 lateinit의 초기값 선언.
lateinitNumber = 3

//실제 사용시 ?를 붙임.
number?.add()

//이미 초기화되어 그럴 필요가 없음.
lateninitNumber.add()
반응형

위처럼 변경이 불가한 var로 number를 널값으로 선언한 경우입니다.

lateinit은 non-Null한 타입만 선언이 가능하므로, 지역 변수에서는 사용이 불가하고, 전역 변수로서만 선언이 가능합니다. 따라서 미리 초기값을 넣지 못하는 상황이 발생할 때, lateinit을 선언하여 초기값을 반드시 세팅하도록 합니다. 이후에 lateinit을 사용 시에는 NullSafe하게 사용이 가능합니다.

 

물론, 초기값을 선언하지 않으며, 에러가 발생하므로 lateinit을 사용 시에는 반드시 초기값을 선언해야 합니다.

 

2. lazy init

 

lazy init은 나중에 초기화를 하겠다는 의미로, 지금 당장 이 많은 코드를 전부 초기화하기 보다는, 실제로 사용 시에 초기화를 해주겠다는 의미입니다.

 

바로 예문을 확인합니다.

val number: Int by lazy {
   3
}

//사용 시에 3이 할당됨.
number.add()

위의 예문처럼, by lazy라는 키워드를 통해서 값을 넣어 줍니다. 사용하기 전까지는 값이 할당되지 않으나, 실제로 사용 시에는 3이 할당됩니다. 안드로이드에서는 뷰의 속성을 lazy init으로 넣은 후 나중에 사용하는 경우도 있습니다.

반응형

'Kotlin' 카테고리의 다른 글

랜덤 함수 Random( )  (0) 2021.07.28
Null Safety  (0) 2021.07.09
람다 표현식 Lamda Expression  (0) 2021.07.09
데이터 클래스 Data Class  (0) 2021.07.08
범위 함수 Scope Function (Apply, Also, Let, With, Run)  (0) 2021.07.08
댓글