#33 Kotlin Koans Properties/Lazy property 해설

1 소개



Kotlin 공식 레퍼런스의 Kotlin Koans Properties/Lazy property의 해설 기사입니다.

Kotlin Koans를 통해 Kotlin을 배우는 사람들의 도움이 되길 바랍니다.

다만, 레퍼런스를 자력으로 읽는 힘을 기르고 싶은 분은,
곧이 기사를 보지 마십시오!

한 번 각자로 도전하고 나서, 눈에 띄게 된다고 생각합니다

2 !! 연산자



null 허용형의 변수의 뒤에 붙이는 것으로,
강제로 null이 아닌 허용 형식으로 변환합니다.

3 Properties/Lazy property 해설



Kotlin Koans Properties/Lazy property의 해설입니다.
수시로 본 사이트의 내용을 인용하겠습니다.

본문과 코드를 살펴보자.

Add a custom getter to make the 'lazy' val really lazy. It should be initialized by the invocation of 'initializer()' at the moment of the first access.

You can add as many additional properties as you need.

Do not use delegated properties!

Lazy_property
class LazyProperty(val initializer: () -> Int) {
    /* TODO */
    val lazy: Int
        get() {
            TODO()
        }
}

lazy 프로퍼티의 get()를 개변하는 것으로, lazy 프로퍼티를 처음 참조했을 때만 초기화되도록 구현합니다.

초기화에는 initializer()를 사용하도록 하기 때문에,
value = initializer() 와 같이 초기화합니다 (value는 모든 변수에서 OK입니다).

value에 null을 대입해 두고, if()의 조건으로서 이용하는 것으로 lazy를 초기화를 합니다. (null을 할당하기 위해 value는 null 허용 유형으로 정의됩니다.)

Lazy_property
class LazyProperty(val initializer: () -> Int) {
    var value: Int? = null
    val lazy: Int
        get() {
            if (value == null) {
                value = initializer()
            }
        }
}

이것으로는 1번째의 참조로 lazy의 초기화는 실행됩니다만, 2번째 이후의 참조에서는 호출하에 아무것도 돌려주지 않게 되어 버리므로,
최종 구현은 다음과 같습니다.

Lazy_property
class LazyProperty(val initializer: () -> Int) {
    var value: Int? = null
    val lazy: Int
        get() {
            if (value == null) {
                value = initializer()
            }
            return value!!
        }
}

value!! 부분에서, !! 연산자가 사용되고 value가 강제적으로 비null 허용형으로 변환되고 있습니다.
val lazy: Int 를 보면, lazy 는 비null 허용형이기 때문입니다.

4 마지막으로



다음은 Kotlin Koans Properties/Delegates examples의 해설을 하겠습니다

좋은 웹페이지 즐겨찾기