시배's Android

Kotlin | 왜 코틀린에서 "by" 키워드를 사용할까?? 본문

Kotlin/Kotlin

Kotlin | 왜 코틀린에서 "by" 키워드를 사용할까??

si8ae 2023. 11. 1. 14:16

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 키워드를 사용하여 확장 함수를 프로퍼티에 적용하면 코드를 더 모듈화하고 가독성을 높일 수 있습니다.

이러한 기능을 통해 코드를 보다 간결하고 유지보수하기 쉽게 만들 있습니다. 새로운 기능을 추가하고 코드를 개선하는데 도움이 것입니다.