프로그래밍 언어/코틀린

코틀린 23. 고차함수, 람다함수

닉네임못짓는사람 2021. 1. 5. 20:41
반응형

이번 글에서는 고차함수와 람다함수에 대해서 알아보도록 하겠습니다.

고차함수


고차함수는 어떠한 함수를 다른 함수의 parameter, 즉 argument로 전달하거나 함수를 리턴 시키는 것을 말합니다.

먼저, 함수를 parameter로 받는 법부터 코드로 확인해보도록 합시다.

 

parameter를 선언할 때는 보통 "변수명: 자료형"의 형태로 선언했었는데, 함수의 경우

함수명: (parameter자료형)의 형식으로 받아오려는 함수의 parameter의 자료형들을 적어주고, 끝에 반환형을 적어주시면 됩니다.

fun main() {
    exB(::exA)
}

fun exA(a: Int, b: Int){
    println(a+b)
}

fun exB(fun1: (Int, Int)-> Unit){
    fun1(10, 20)
}

이렇게 exA함수의 parameter와 반환값을 적어서 exB함수의 parameter로 선언해주었습니다.

이때 -> Unit에서 Unit은 반환값이 없다는 것을 의미합니다.

 

위의 코드에서 exB함수는 parameter로 받아온 exA함수에 argument로 10과 20을 주어 실행시켰습니다.

또한 이렇게 고차 함수를 parameter로 주어서 실행하려면 exB함수 호출 시에 argument로 주려는

exA함수 앞에 콜론 두 개(::)를 붙여서 고차함수로 바꿔주어야 합니다.

 

다음으론 함수를 다른 함수의 반환값으로 사용하는 경우입니다.

fun main() {
    println(exB())
}

fun exA(a: Int, b: Int) = a + b

fun exB() = exA(10, 20)

위와 같이 a+b를 계산하는 함수 exA를 exB의 반환값으로 사용했습니다.

 

그럼 다음으로는 람다함수에 대해서 알아봅시다.

람다함수


람다함수는 람다 표현식(Lambda expression)이라고도 말하는 이름 없는 익명함수를 이야기합니다.

fun main() {
    val sum: (Int, Int)->Int = {x: Int, y: Int -> x+y}
    println(exA(10, 20))
    println(sum(10,20))
}

fun exA(a: Int, b: Int) = a + b

위의 코드는 sum변수에 람다함수를 대입한 코드입니다.

람다 함수는 따로 이름이 없이 중괄호 블록 안에 구현하게 되는데, 위의 코드를 보면

->를 기준으로 왼쪽이 parameter, 오른쪽이 구현부라고 할 수 있습니다.

 

sum변수를 선언할 땐 고차함수를 사용할 때처럼 형식을 지정해 주시면 됩니다.

또한 람다 함수는 구현부의 가장 마지막 줄이 반환값이 되기 때문에 주의하시길 바랍니다.

fun main() {
    val sum: (Int, Int)->Int = {x: Int, y: Int -> 
        println("람다함수")
        x+y}
    println(exA(10, 20))
    println(sum(10,20))
}

fun exA(a: Int, b: Int) = a + b

이렇게 람다 함수를 여러 줄로 작성할 시 마지막 줄인 x+y가 반환값으로 지정됩니다.

 

이번 글에서는 이렇게 고차함수와 람다함수에 대해서 알아봤습니다.

이번 글은 이 정도로 마치도록 하겠습니다.

감사합니다.

반응형

'프로그래밍 언어 > 코틀린' 카테고리의 다른 글

코틀린 25. 오브젝트  (0) 2021.01.07
코틀린 24. 스코프함수  (0) 2021.01.06
코틀린 22. 맵(Map)  (0) 2021.01.01
코틀린 21. 셋(Set)  (0) 2020.12.30
코틀린 20. 리스트(List)  (0) 2020.12.28