본문 바로가기
Android/안드로이드 스터디(Kotlin)

Kotlin] 41. 위임

by 김마리님 2020. 12. 14.

코틀린에서는 프로퍼티의 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