람다함수는 간단히 말해 익명 함수로 한번만 사용되거나 간단한 연산을 표현할 때 유용하다.
코틀린에서 람다함수는 💡일급 객체로 취급되기 때문에 람다 함수를 변수에 담고, 함수의 파라미터 혹은 반환값으로 사용 될 수 있다.
람다는 { 파라미터 → 함수 본문 }
형식을 띄고 있다.
예시
1. 타입선언 방식
val sum: (Int, Int) -> Int = { x, y -> x + y }
2. 타입추론 방식
val sumTwo: { x:Int, y:Int -> x + y }
💡 일급 객체란?
1. 변수에 할당할 수 있어야 한다.
2. 함수의 매개변수로 전달할 수 있어야 한다.
3. 함수의 반환값에 사용될 수 있어야 한다.
고차함수는 함수를 변수처럼 다루어 파라미터로 전달하거나 다른 함수의 반환값으로 받는 특별한 함수이다.
이는 코틀린에서 람다 함수나 함수 참조를 활용하여 함수를 값으로 사용할 수 있음을 의미합니다.
이를 통해 코드를 더 간결하게 작성할 수 있습니다. 예를 들어, 맵(map), 필터(filter), 리듀스(reduce)와 같은 고차함수는 반복적으로 사용되는 로직을 간편하게 적용할 수 있도록 도와줍니다.
예시
1. 람다
fun main () {
fun operateOnNumbers(x: Int, y: Int, operation: (Int, Int) -> Int): Int {
return operation(x, y)
}
// 람다 - 타입 선언
val sum: (Int, Int) -> Int = { x, y -> x + y }
// 람다 - 타입 추론
val sumTwo = { x:Int, y:Int -> x + y }
println(operateOnNumbers(1, 2, sum)) // 출력: 3
println(operateOnNumbers(2, 3, sumTwo)) // 출력: 5
}
2. 함수 참조
코틀린에서는 ‘::’ 연산자를 활용하여 함수를 참조해 함수를 일급 객체로서 활용할 수 있다.
fun main () {
fun operateOnNumbers(x: Int, y: Int, operation: (Int, Int) -> Int): Int {
return operation(x, y)
}
fun add(a:Int,b:Int):Int{
return a + b
}
// '::'제거시 오류
val sumThree = ::add
println(operateOnNumbers(3, 4, sumThree)) // 출력: 7
}