본문 바로가기
컴퓨터 언어/Kotlin

[Kotlin] 고차 함수와 람다 함수

by 웅대 2022. 12. 20.
728x90

고차 함수란 함수를 인자로 받거나 함수로 반환하는 함수이다.

 

람다 함수의 다른 뜻은 익명 함수로 함수를 단순하게 표현할 수 있다.

 

불필요한 연산을 줄여 메모리를 아낄 수 있다는 장점이 있다.

 

이제 고차 함수의 인자로 람다 함수를 받는 방법을 공부해보려한다.

 

첫 번째와 두 번째 인자로 정수를 받고 세 번째 인자로 연산을 정의한 함수를 받으려고 한다.

 

세 번째 인자에 따라서 두 정수를 더하거나 빼거나 곱하는 함수를 만들어보려한다.

 

fun calculate(a:Int,b:Int,op:(Int,Int)->Int){
        println(op(a,b))
    }

세 번째 인자의 경우 정수 두 개를 받아서 정수를 반환하는 형태이다.

 

이제 이를 사용하기 위해서는 calculate 함수를 호출할 때 세 번째 인자로 람다 함수를 주면 된다.

 

    calculate(5,4,{a,b->a+b}) //덧셈
    
    calculate(5,4,{a,b->a-b}) //뺄셈
    
    calculate(5,4,{a,b->a*b}) //곱셈
    
    calculate(5,4,{a,b->a/b}) //나눗셈

위와 같이 람다 함수가 마지막 파라미터라면 밖으로 빼내는 것을 권장한다.

 

    calculate(5,4){a,b->a+b} //덧셈

    calculate(5,4){a,b->a-b} //뺄셈

    calculate(5,4){a,b->a*b} //곱셈

    calculate(5,4){a,b->a/b} //나눗셈

 

이제 배열의 요소들 중 특정 조건을 만족하는 요소의 개수를 출력하는 고차 함수도 만들어보겠다.

 

    fun count(arr:IntArray,bool:(Int)->Boolean){
        var count = 0
        for(i in arr){
            if(bool(i)) count++
        }
        println(count)
    }

 

배열에서 짝수의 개수, 양수의 개수를 출력하고 싶다면 다음과 같이 람다 함수를 사용하면 된다.

    val arr = intArrayOf(1,2,3,4,5,6,7,8,9,-1,-2,-3)
    count(arr){it->it%2==0} //짝수의 개수 출력
    count(arr){it->it>0} //양수의 개수 출력
728x90
반응형

댓글