코틀린의 observable, vetoable 위임자

코틀린은 2011년 중순에 공개되어 지속적으로 발전되어 오다가 2019년에 구글 안드로이드 개발 주요 개발언어로 채택되면서 현대적인 프로그래밍 언어중 하나입니다. 이 글은 코틀린의 데이터 변수에 obserable과 vetoable 위임자를 지정하여 변수의 값이 변경될 경우 원하는 로직을 실행하거나 변수의 값의 변경시 특정 조건과 맞지 않으면 변경을 취소하는 내용을 대해 설명합니다.

먼저 obserable 위임자를 통한 변수값 변경시 처리입니다.

import kotlin.properties.Delegates

class User {
    var name: String by Delegates.observable("초기값") {
        prop, old, new -> println("$old 값이 $new 값으로 변경됩니다.")
    }
}

fun main() {
    val user = User()
    user.name = "홍길동"
    user.name = "임꺽정"
}

실행 결과는 다음과 같습니다.

초기값 값이 홍길동 값으로 변경됩니다.
홍길동 값이 임꺽정 값으로 변경됩니다.

다음은 vetoable 위임자입니다. 값의 변경시 특정한 조건에 따라 변경을 취소할 수 있습니다.

import kotlin.properties.Delegates

class MoreBiggerInt(initValue: Int) {
    var value: Int by Delegates.vetoable(initValue) {
        property, oldValue, newValue -> {
        val result = newValue > oldValue
        if(result) {
            println("더 큰 값이므로 값을 변경합니다.")
        } else {
            println("작은 값이므로 변경을 취소합니다.")
        }
        result
    }()
    }
}

fun main() {
    val vv = MoreBiggerInt(10)

    vv.value = 20
    println("${vv.value}")

    vv.value = 5
    println("${vv.value}")
}

실행 결과는 다음과 같습니다.

더 큰 값이므로 값을 변경합니다.
20
작은 값이므로 변경을 취소합니다.
20

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다