코틀린에서 위임(delegation)은 클래스가 특정 동작을 다른 객체에게 위임하는 메커니즘을 의미합니다. 주로 프로퍼티 위임을 다루고 있지만, 위임은 메서드 호출에도 활용될 수 있습니다.
프로퍼티 위임
프로퍼티 위임은 새로운 프로퍼티를 선언할 때, 해당 프로퍼티의 getter나 setter를 다른 객체에 위임하는 기능입니다. by 키워드를 사용하여 프로퍼티 위임을 선언합니다.
interface PropertyDelegate<T> {
operator fun getValue(thisRef: Any?, property: KProperty<*>): T
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T)
}
class Example : PropertyDelegate<String> {
override fun getValue(thisRef: Any?, property: KProperty<*>): String {
return "Hello, Delegate!"
}
override fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
println("Setting value to $value")
}
}
class MyClass(delegate: PropertyDelegate<String>) {
var myProperty: String by delegate
}
fun main() {
val example = Example()
val myClass = MyClass(example)
println(myClass.myProperty) // 출력: Hello, Delegate!
myClass.myProperty = "New Value" // 출력: Setting value to New Value
}
위의 예제에서 PropertyDelegate 인터페이스를 정의하고, Example 클래스가 이를 구현합니다. 그리고 MyClass에서 myProperty 프로퍼티를 Example 클래스에 위임합니다.
메서드 위임
메서드 위임은 인터페이스를 통해 클래스의 메서드를 다른 객체에 위임하는 개념입니다. 다음은 간단한 메서드 위임의 예제입니다.
interface Printer {
fun printMessage(message: String)
}
class ConsolePrinter : Printer {
override fun printMessage(message: String) {
println("Console: $message")
}
}
class FilePrinter : Printer {
override fun printMessage(message: String) {
// 파일에 메시지 출력 로직
}
}
class MessageProcessor(private val printer: Printer) {
fun processMessage(message: String) {
// 어떤 로직 수행 후 메시지 출력
printer.printMessage(message)
}
}
fun main() {
val consolePrinter = ConsolePrinter()
val filePrinter = FilePrinter()
val processor1 = MessageProcessor(consolePrinter)
val processor2 = MessageProcessor(filePrinter)
processor1.processMessage("Hello, Console!")
processor2.processMessage("Hello, File!")
}
위의 예제에서 Printer 인터페이스를 정의하고, ConsolePrinter와 FilePrinter 클래스가 이를 구현합니다. 그리고 MessageProcessor 클래스에서 메시지를 처리하고 출력하는 메서드를 가지고 있습니다. 이 때 Printer 인터페이스를 통해 메서드를 다른 객체에 위임합니다.
이러한 위임 메커니즘은 코드의 재사용성을 높이고, 각 기능을 분리하여 관리할 수 있도록 도와줍니다.
With ChatGPT
'Kotlin > 포스팅' 카테고리의 다른 글
코틀린 중위 함수를 사용해 플루언트 DSL 생성 (0) | 2024.01.06 |
---|---|
코틀린 고차 함수와 DSL (0) | 2024.01.06 |
코틀린 커스텀 위임 만들기 (0) | 2024.01.06 |
코틀린 표준 위임들 (0) | 2024.01.06 |
코틀린 위임 프로퍼티 (0) | 2024.01.06 |