brunch

You can make anything
by writing

C.S.Lewis

by 서준수 Jan 02. 2018

코틀린 익명 함수 (Anonymous Function)

빠르게 살펴보기

익명 함수 (Anonymous Function)


 앞서 살펴본 람다식 문법에서는 함수의 리턴 타입을 지정하는 방법이 누락되어 있습니다. 대부분 리턴 타입을 자동으로 유추할 수 있기에 불필요하기 때문입니다. 하지만 리턴 타입을 명시적으로 지정해야 할 필요가 있으면 익명 함수를 사용할 수 있습니다.


 익명 함수는 함수명이 없다는 것을 빼면 보통 함수 선언과 거의 똑같은 모습을 하고 있습니다. body도 다음과 같이 표현식이나 블록으로 선언할 수 있습니다.


표현식


fun(x: Int, y: Int): Int = x + y


블록


fun(x: Int, y: Int): Int {

        return x + y

}



 파라미터와 리턴 타입은 보통 함수와 동일한 방법으로 지정합니다. 단, 파라미터 타입을 문맥상 유추할 수 있으면 생략할 수 있습니다.


 람다식에서 qualified return syntax를 이용하는 것이 다소 번거롭기 때문에 람다식 대신에 익명 함수를 사용할 수 있습니다.                    


fun main(args: Array<String>) {

    val isPositive = fun(num: Int): Boolean {

        val isPositive = num > 0

        return isPositive

    }

    println("isPositive(10) = ${isPositive(10)}")

}


isPositive(10) = true



 또한 위에서 말했듯이 리턴 타입을 명시적으로 지정해야 할 필요가 있으면 다음과 같이 익명 함수를 사용할 수 있습니다.                  


fun main(args: Array<String>) {

    val returnAny = {

        "returnAny" as Any

    }


    val returnAnyTest = fun(): Any = "returnAnyTest"


    println("returnAny = ${returnAny()}")

    println("returnAny2 = ${returnAnyTest()}")

}


returnAny = retyrnAny

returnAny2 = returnAnyTest



 Any로 리턴 타입을 명시적으로 지정했지만 println에서 toString()으로 변환되어 출력된 것입니다.

이전 17화 코틀린 Lambda Expression
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari