코틀린에서는 프로퍼티의 getter/setter을 모듈화할 수 있도록 다른 객체에 위임할 수 있다.
- Sample.kt
package delegatedPropertyEx
class Sample{
var number : Int by OnlyPositive()
}
by를 통해 위임할 객체를 찾는다.
위임할 객체를 보자.
- OnlyPositive.kt
package delegatedPropertyEx
import kotlin.reflect.KProperty
class OnlyPositive {
private var realValue : Int = 0
operator fun getValue(thisRef : Any?, property : KProperty<*>) : Int {
return realValue
}
operator fun setValue(thisRef : Any?, property : KProperty<*>, value : Int) {
realValue = if(value > 0 ) value else 0
}
}
위임된 객체가 어떻게 작용하는지 보자.
- Main.kt
package delegatedPropertyEx
fun main() {
val sample = Sample()
sample.number = -50
println(sample.number)
sample.number = 100
println(sample.number)
}
결과 :
0
100
객체를 위임하듯 클래스도 위임할 수 있다. 예시를 보자.
인터페이스를 선언한다.
- Plusable.kt
package classDelegate
interface Plusable {
operator fun plus(other : Int) : Int
}
인터페이스의 함수를 구현하는 클래스를 선언한다.
- ClassDelegator.kt
package classDelegate
class ClassDelegator : Plusable{
override fun plus(other : Int) : Int {
println("기본 구현")
return other
}
}
- Sample.kt
package classDelegate
class Sample : Plusable by ClassDelegator()
객체위임과 마찬가지로 클래스 위임도 위임 대상을 by로 설정한다.
- Main.kt
package classDelegate
fun main() {
println(Sample() + 10)
}
결과 :
기본 구현
10
반응형
'Android > 안드로이드 스터디(Kotlin)' 카테고리의 다른 글
Kotlin] 43. Triple (0) | 2020.12.22 |
---|---|
Kotlin] 42. Pair (0) | 2020.12.17 |
Kotlin] 40. sealed Class (0) | 2020.12.11 |
Kotlin] 39. enum (0) | 2020.12.11 |
Kotlin] 38. 배열 (0) | 2020.12.11 |