Delegated properties - kotlin
몇 가지 일반적인 유형의 속성을 사용하면 필요할 때마다 직접 구현할 수 있지만 한 번 구현하고 라이브러리에 추가한 다음 나중에 다시 사용하는 것이 더 유용합니다. 예를 들어:
-
게으른 속성: 값은 처음 액세스할 때만 계산됩니다.
-
관찰 가능한 속성: 수신기는 이 속성의 변경 사항에 대해 알림을 받습니다.
-
각 속성에 대한 별도의 필드 대신 맵에 속성을 저장합니다.
코틀린은 다음과 같은 경우들을 다루기 위해 위임된 속성들을 지원합니다.
class Example {
var p: String by Delegate()
}
구문은: val/var <property name>: <Type> by <expression>
입니다. 속성에 해당하는 get()(및 set()가 getValue() 및 setValue() 메서드에 위임되기 때문에 by 뒤의 식은 위임입니다. 속성 위임자는 인터페이스를 구현할 필요가 없지만 getValue() 함수를 제공해야 합니다(그리고 setValue()는 var에 대해 제공).
예를들어:
import kotlin.reflect.KProperty
class Delegate {
operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
return "$thisRef, thank you for delegating '${property.name}' to me!"
}
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
println("$value has been assigned to '${property.name}' in $thisRef.")
}
}
위임의 인스턴스에 위임하는 p에서 읽으면 위임의 getValue() 함수가 호출됩니다. 첫 번째 매개 변수는 p를 읽는 개체이고 두 번째 매개 변수는 p 자체에 대한 설명을 포함합니다(예: 이름을 지정할 수 있음).
val e = Example()
println(e.p)
다음을 출력합니다.
Example@33a17727, thank you for delegating 'p' to me!
마찬가지로 p에 할당하면 setValue() 함수가 호출됩니다. 첫 번째 두 매개 변수는 동일하며 세 번째 매개 변수는 할당되는 값을 유지합니다.
e.p = "NEW"
다음을 출력합니다.
NEW has been assigned to 'p' in Example@33a17727.
위임된 개체에 대한 요구 사항의 사양은 아래에서 확인할 수 있습니다.
함수 또는 코드 블록 내에서 위임된 속성을 선언할 수 있으며, 클래스의 구성원이 아니어도 됩니다. 아래에서 예를 찾을 수 있습니다.
Standard delegates
Kotlin 표준 라이브러리는 몇 가지 유용한 유형의 위임자들에게 팩토리 메서드를 제공합니다.
Lazy Properties
lazy()는 Lambda를 가져와서 Lazy의 인스턴스를 반환하는 함수이며, Lazy 속성을 구현하기 위한 대리자 역할을 할 수 있습니다. get()에 대한 첫 번째 호출은 lazy()에 전달된 람다를 실행하고 결과를 기억합니다. get()에 대한 후속 호출은 단순히 기억된 결과를 반환합니다.
-작성중
Author And Source
이 문제에 관하여(Delegated properties - kotlin), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@roo333/Delegated-properties-kotlin저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)