타이탄의 도구들

[Kotlin] 람다표현식1 (일급함수, 콜백함수, 고차함수) 본문

Dev Tools/Kotlin

[Kotlin] 람다표현식1 (일급함수, 콜백함수, 고차함수)

Titan04 2022. 6. 22. 23:04
728x90

 

함수를 다른 변수와 동일하게 다루는 언어는 일급 함수를 가졌다고 표현합니다.

예를 들어, 일급 함수를 가진 언어에서는

함수를 변수에 할당하거나,

함수를 다른 함수에 인자로 제공할 수 있으며,

함수가 함수를 반환할 수 있습니다.

1. 일급함수는 변수에 할당할 수 있습니다.

아래 코드에서 변수 helloTitans에

"Hello Titans"를 리턴하는 함수를 할당할 수 있습니다.

val helloTitans : () -> String = {"Hello Titans"}

2. 일급함수는 다른 함수에 인자로 제공할 수 있어야 합니다

val helloTitans: () -> String = {"Hello Titans"}
fun printHelloTitans( paramFuntion : () -> String) {
    print("${paramFuntion()}")
}

fun main(args: Array<String>) {
    //함수인 helloTitans를 인자로 가짐
   //또한 helloTitans 처럼 다른 함수에 인자로 전달된 함수를 '콜백함수'라고 합니다.
    printHelloTitans(helloTitans)
}

실행 결과

Hello Titans

3. 일급함수는 함수가 함수를 반환할 수 있습니다.

val helloTitans: () -> String = {"Hello Titans"}
fun returnHelloTitans(): () -> String {
    //함수인 helloTitans를 리턴(반환)값으로 가짐
   // 또한 returnHelloTitans()와 같이 함수를 반환하는 함수를 '고차함수' 라고합니다.
    return helloTitans
}

//cf) 고차함수는 함수를 인자로 받아 함수로 리턴할 수도 있습니다.
fun higherOrderFunctions(paramFunction : ()-> String ) : () -> String {
   return paramFunction 
}

fun main(args: Array<String>) {
    val returned1: ()->String = returnHelloTitans()
    val returned2: ()->String = higherOrderFunctions(helloTitans)
    print("${returned1()}")
    print("${returned2()}")
}

실행 결과

Hello Titans

 

cf) 일급 객체란?

아래 3가지 조건을 충족하는 객체

1. 변수에 할당 할 수 있어야 한다.

2. 인자로 넘길 수 있어야 한다.

3. 리턴값으로 리턴 할수 있어야 한다.

728x90
Comments