시배's Android
Kotlin | 왜 코틀린에서 "by" 키워드를 사용할까?? 본문
Kotlin by 키워드: 위임 프로퍼티와 확장 함수
Kotlin은 강력한 기능 중 하나로 by 키워드를 사용하여 프로퍼티에 위임(delegation)하는 기능을 제공합니다. 이것은 코드의 재사용성과 모듈화를 높이는데 도움이 되며, 다양한 상황에서 유용하게 활용됩니다. 이번 포스팅에서는 by 키워드를 사용하는 두 가지 주요 방법에 대해 알아보겠습니다.
1. 위임 프로퍼티 (Delegated Properties)
위임 프로퍼티를 사용하면, 프로퍼티의 getter와 setter를 다른 객체에 위임할 수 있습니다. 이것은 코드 중복을 줄이고 프로퍼티 동작을 재사용할 수 있는 강력한 방법입니다. by 키워드를 사용하여 다음과 같이 선언할 수 있습니다.
class Example {
var someProperty: String by Delegate()
}
class Delegate {
operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
// 이곳에서 프로퍼티 값을 반환하거나 수정
return "Hello, Delegate!"
}
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
// 이곳에서 프로퍼티 값을 설정
println("$value has been assigned to '${property.name}'")
}
}
위의 예제에서 someProperty는 Delegate 클래스에 위임되었습니다. 이제 someProperty를 읽거나 쓸 때 Delegate 클래스의 getValue 및 setValue 메서드가 호출됩니다.
2. 확장 함수 (Extension Functions)
by 키워드는 확장 함수에도 사용될 수 있습니다. 확장 함수를 사용하여 기존 클래스에 새로운 함수를 추가할 수 있습니다. 아래는 String 클래스에 새로운 기능을 추가하는 예제입니다.
class Example {
val greeting: String by "Hello, Kotlin".prependAndAppend("Bye, Kotlin")
}
fun String.prependAndAppend(suffix: String): ReadOnlyProperty<Any?, String> {
return object : ReadOnlyProperty<Any?, String> {
override fun getValue(thisRef: Any?, property: KProperty<*>): String {
return "$this$suffix"
}
}
}
위의 예제에서, prependAndAppend 확장 함수는 String 클래스에 greeting 프로퍼티에 대한 값을 생성합니다.
이렇게 by 키워드를 사용하여 확장 함수를 프로퍼티에 적용하면 코드를 더 모듈화하고 가독성을 높일 수 있습니다.
이러한 기능을 통해 코드를 보다 간결하고 유지보수하기 쉽게 만들 수 있습니다. 새로운 기능을 추가하고 코드를 개선하는데 도움이 될 것입니다.
'Kotlin > Kotlin' 카테고리의 다른 글
Kotlin | Backing Property & Backing Field (0) | 2024.01.19 |
---|---|
Kotlin | The Big Difference Between Flows and Channels in Kotlin (0) | 2023.09.20 |
Kotlin | KSP vs KAPS (0) | 2023.09.20 |
Kotlin | Deep Dive into Sealed Interfalces (0) | 2023.09.03 |
Kotlin | Generic (0) | 2023.08.27 |