고차 함수와 람다 표현식 - swkim0128/PARA GitHub Wiki
- 고차 함수는 다른 함수를 매개변수로 받거나, 반환값으로 함수를 반환하는 함수를 말합니다.
- 함수를 값처럼 다루는 특징이 있습니다.
fun 함수이름(매개변수: (매개변수 타입) -> 반환타입): 반환타입 {
// 함수 본문
}
고차 함수 예제
fun calculate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
return operation(a, b)
}
fun main() {
val sum = calculate(5, 3) { x, y -> x + y }
println("Sum: $sum") // 출력: Sum: 8
}
fun operation(type: String): (Int, Int) -> Int {
return when (type) {
"add" -> { a, b -> a + b }
"subtract" -> { a, b -> a - b }
else -> { _, _ -> 0 }
}
}
fun main() {
val addOperation = operation("add")
println(addOperation(5, 3)) // 출력: 8
}
- 람다 표현식은 익명 함수로, 이름 없이 함수처럼 사용할 수 있는 표현식입니다.
- 간단한 함수를 작성할 때 유용합니다.
{ 매개변수1: 타입, 매개변수2: 타입 -> 반환값 }
람다 표현식 예제
val sum = { a: Int, b: Int -> a + b }
fun main() {
println(sum(5, 3)) // 출력: 8
}
- 코틀린은 람다 표현식의 매개변수 타입을 추론할 수 있습니다.
val multiply = { x: Int, y: Int -> x * y }
fun main() {
println(multiply(4, 5)) // 출력: 20
}
- 코틀린의 컬렉션 API는 고차 함수와 람다 표현식을 적극적으로 활용합니다.
예제: map과 filter
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
// map: 각 요소를 변환
val doubled = numbers.map { it * 2 }
println(doubled) // 출력: [2, 4, 6, 8, 10]
// filter: 조건에 맞는 요소만 필터링
val even = numbers.filter { it % 2 == 0 }
println(even) // 출력: [2, 4]
}
- 람다 표현식에서 매개변수가 하나인 경우, 이름을 명시하지 않고 it 키워드를 사용할 수 있습니다.
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
val squared = numbers.map { it * it }
println(squared) // 출력: [1, 4, 9, 16, 25]
}
- 고차 함수는 런타임 시 함수 호출 비용이 발생할 수 있습니다.
- 인라인 함수 (inline)는 고차 함수의 호출 비용을 줄이기 위해 사용됩니다.
인라인 함수 예제
inline fun execute(action: () -> Unit) {
action()
}
fun main() {
execute {
println("Hello, Inline Function!")
}
}
- 람다 표현식과 유사하지만, 명시적으로 return을 사용할 수 있습니다.
익명 함수 문법
fun(x: Int, y: Int): Int {
return x + y
}
익명 함수 예제
val add = fun(x: Int, y: Int): Int {
return x + y
}
fun main() {
println(add(5, 3)) // 출력: 8
}
특징 | 고차 함수 | 람다 표현식 |
---|---|---|
정의 위치 | 함수로 정의 | 익명 함수로 사용 |
반환 타입 | 함수 타입을 반환 가능 | 이름 없는 함수로 직접 사용 |
사용 목적 | 함수 호출 및 반환 | 간결한 함수 표현 |
- 함수를 매개변수로 전달하거나, 반환값으로 함수를 반환할 수 있음.
- 코틀린의 컬렉션 함수(map, filter, reduce)에서 자주 사용.
- 익명 함수로, 간결하게 함수를 정의할 수 있음.
- it 키워드를 사용해 매개변수를 간단히 참조 가능.
- 고차 함수의 성능 문제를 해결하기 위해 사용.
고차 함수와 람다 표현식은 코틀린의 함수형 프로그래밍 패러다임을 지원하며, 코드의 간결성과 가독성을 높이는 데 유용합니다.