Kotlin/포스팅

코틀린 람다와 수신 객체 지정 함수 타입

짜집퍼박사(짜박) 2023. 12. 31. 03:14

코틀린에서 람다와 수신 객체 지정 함수 타입은 함수형 프로그래밍 및 DSL (Domain-Specific Language) 등을 지원하기 위해 도입된 기능입니다. 람다 함수와 수신 객체 지정 함수 타입에 대해 알아봅시다.

 

1. 람다 함수 (Lambda Function)

코틀린에서 람다 함수는 함수의 일종으로, 다음과 같이 선언할 수 있습니다.

val sum: (Int, Int) -> Int = { x, y -> x + y }

- sum: 변수 이름

- (Int, Int) -> Int: 람다 함수의 타입. 이는 두 개의 Int 파라미터를 받아서 Int를 반환하는 함수를 나타냅니다.
- { x, y -> x + y }: 람다 함수의 구현체. 여기서 x와 y는 파라미터를 나타내며, x + y는 함수의 반환값입니다.

 

람다 함수는 주로 고차 함수와 함께 사용되며, 함수형 프로그래밍에서 강력한 도구로 사용됩니다.

 

2. 수신 객체 지정 함수 타입 (Function Type with Receiver)

수신 객체 지정 함수 타입은 특별한 종류의 함수 타입으로, 수신 객체를 명시적으로 지정할 수 있는 기능을 제공합니다. 일반적으로 이를 사용하여 DSL을 작성하거나 확장 함수의 작성 등에 활용됩니다.

예를 들어, StringBuilder에 대한 수신 객체 지정 함수 타입은 다음과 같이 정의됩니다.

fun buildString(action: StringBuilder.() -> Unit): String {
    val stringBuilder = StringBuilder()
    stringBuilder.action()
    return stringBuilder.toString()
}

StringBuilder.() -> Unit: 수신 객체 지정 함수 타입. 이는 StringBuilder를 수신 객체로 받고 아무런 값을 반환하지 않는 함수를 나타냅니다.
이제 이 함수를 사용해보면,

val result = buildString {
    append("Hello, ")
    append("World!")
}
println(result)  // 출력: Hello, World!

여기서 buildString 함수에 전달된 람다의 수신 객체는 StringBuilder가 되며, 람다 내에서는 StringBuilder의 멤버 함수인 append를 호출할 수 있습니다.

수신 객체 지정 함수 타입은 확장 함수에서도 주로 사용됩니다. 예를 들면,

fun StringBuilder.buildStringWithPrefix(prefix: String.() -> Unit): StringBuilder {
    val result = StringBuilder()
    result.prefix()
    result.append(this)
    return result
}

val finalResult = StringBuilder().buildStringWithPrefix {
    append("Hello, ")
    append("World!")
}
println(finalResult)  // 출력: Hello, World!

여기서 prefix: String.() -> Unit은 수신 객체 지정 함수 타입으로, String을 수신 객체로 받고 아무런 값을 반환하지 않는 함수를 나타냅니다.

람다 함수와 수신 객체 지정 함수 타입은 함수형 프로그래밍과 DSL 작성에서 강력한 기능으로 활용되며, 코틀린의 간결하고 표현력 높은 문법을 지원하는 데에 기여하고 있습니다.

 

With ChatGPT

'Kotlin > 포스팅' 카테고리의 다른 글

코틀린 영역 함수  (0) 2023.12.31
코틀린 수신 객체가 있는 호출 가능 참조  (0) 2023.12.31
코틀린 동반 확장  (0) 2023.12.31
코틀린 확장 프로퍼티  (0) 2023.12.31
코틀린 확장 함수  (0) 2023.12.31