코틀린 변수 프로퍼티 위임(lazy, delegates)

Koder·2022년 12월 18일
0

코틀린에서 변수에 대해 변화가 감지되면 이벤트를 후킹처리 할수있습니다.
다음과 같이 간단하게 숫자가 변화될때 마다 로그를 출력하는 모습입니다.

지연선언(by Lazy)

val lazyValue: String by lazy {
 	// TODO: SELF
	"Lazy String"
}

클래스가 생성된 이후에 처음으로 lazy로 정의된것이 사용될때 초기화 된다.
초기화가 되는 시점의 값을 계속 갖고 있으며 프로그램이 종료되기전까지 그 값으로 유지된다.

델리게이트(by Delegates.observable)

var number by Delegates.observable(1) { _, old, new ->
    println("number changed [$old] -> [$new]")
}

number += 1
number += 1
number += 1
number changed [1] -> [2] // 위에서 ++ 변화될때마다 출력
number changed [2] -> [3]
number changed [3] -> [4]

친절하게도 코틀린에서는 'kotlin.reflect.KProperty'안에 델리게이트 옵저버블을 지원하고 있다.
만약 프로퍼티 위임(by)을 할때 델리게이트 패턴이 적용되지 않는 선언을 시도한다면 다음과 같은 경험을 할수있다.

프로퍼티를 위임하려면 가이드에 맞게 사용해야 한다는것을 확인할수 있엇다.

profile
일단 적고 보자

0개의 댓글