좌충우돌 코딩

코틀린 - 지연 초기화 본문

코틀린/순수 코틀린

코틀린 - 지연 초기화

Tracoding 2023. 3. 31. 22:04

프로그래밍 언어에서 변수 선언하고 그 변수에 값을 할당하는 것을 초기화라고 합니다.

근데 왜 초기화라고 할까요???

 

fun main() {
    var num
    println($num)
}

위와 같이 코드를 작성하게 되면 어떻게 되나요??

컴파일 에러가 발생하죠.

에러의 내용은 무엇일까요??

Kotlin: Variable 'num' must be initialized

num 변수가 초기화 해야한다.

 

그러니까요... 왜 초기화해서 써야하냐구요~~

 

컴퓨터에 자원은 한정적입니다.

무한하지 않죠. 그래서 개발자가 num 변수명을 프로젝트에서 사용하고 또다른 프로젝트에 같은 num 변수명을 사용하고

초기화를 하지 않는다면 num이라는 값에 가비지벨류가 들어가있습니다.

컴퓨터 메모리에 num를 만들어져있고 서로 다른 프로젝트일지라도 메모리 주소는 하나를 가르킵니다. 초기화가 안되면...

그래서 이를 방지하고 코틀린은 컴파일에서 개발자를 위해서 먼저 오류를 발견해줍니다.

이처럼 이전 변수가 값이 무엇이였든, 새로 값을 넣기 때문에 초기화라고 부르는 것이죠.

 

또한 초기화를 미룰 수 있습니다.

 

초기화 미루기

가끔 프로그래밍을 하다보면 값을 할당할 수 없을 때가 있습니다. 이때는 lateinit나 lazy 키워드로 나중에 변수에 초깃값을 할당할 것이라고 선언할 수 있습니다.


먼저 lateinit 키워드 부터 알아보죠

 

lateinit 키워드

lateinit var value: String

문법 형식은 위와 같습니다. lateinit 키워드는 안되는 것이  2가지가 있습니다.

 

첫번째 val 키워드는 사용할 수 없습니다.

두번째 Int, Short, Double, Float, Boolean, Byte 타입을 사용할 수 없습니다.

 

 

lazy 키워드

val value: Int by lazy {
    println("in lazy..")
    30
}

문법 형식은 위와 같습니다. lazy는 안되는 것이 1가지 있습니다. 

 

lateinit 키워드와 반대로 var 키워드를 사용할 수 없습니다.

그리고 조금 특이한 것은 { }로 안에 선언을 한다는 것이죠

또한 중괄호 안에 마지막 라인이 초깃값이 됩니다.

 

 

그럼 이만~~!!

'코틀린 > 순수 코틀린' 카테고리의 다른 글

코틀린 - 타입 별칭(typealias)  (0) 2023.04.09
코틀린 - 람다 함수  (0) 2023.04.07
코틀린 - 널(null)  (0) 2023.03.29
코틀린 - 다양한 클래스  (0) 2023.03.27
코틀린 - 상속  (0) 2023.03.26
Comments