코틀린에서 "고차 함수"는 함수를 인자로 받거나, 함수를 반환하거나, 함수를 변수에 대입할 수 있는 함수를 가리킵니다. 이는 함수형 프로그래밍의 핵심 개념 중 하나입니다. 고차 함수를 사용하면 코드를 더 간결하게 작성하고, 추상화 수준을 높일 수 있습니다.
1. 함수를 인자로 받는 고차 함수
fun <T> List<T>.customFilter(predicate: (T) -> Boolean): List<T> {
val resultList = mutableListOf<T>()
for (item in this) {
if (predicate(item)) {
resultList.add(item)
}
}
return resultList
}
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
// customFilter 함수에 람다식을 인자로 전달
val evenNumbers = numbers.customFilter { it % 2 == 0 }
println(evenNumbers) // 출력: [2, 4]
}
2. 함수를 반환하는 고차 함수
fun multiplyBy(factor: Int): (Int) -> Int {
return { number -> number * factor }
}
fun main() {
val multiplyByTwo = multiplyBy(2)
println(multiplyByTwo(3)) // 출력: 6
}
3. 함수를 변수에 대입하는 고차 함수
val add: (Int, Int) -> Int = { a, b -> a + b }
fun main() {
println(add(2, 3)) // 출력: 5
}
4. 고차 함수를 인자로 받는 함수
fun operateOnNumbers(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
return operation(a, b)
}
fun main() {
val result = operateOnNumbers(10, 5) { x, y -> x + y }
println(result) // 출력: 15
}
5. 함수 타입과 Nullable 함수 타입
fun handleNullableFunction(fn: ((Int) -> Int)?) {
if (fn != null) {
val result = fn(10)
println(result)
} else {
println("Function is null")
}
}
fun main() {
val addTen: (Int) -> Int = { it + 10 }
handleNullableFunction(addTen) // 출력: 20
val nullFunction: ((Int) -> Int)? = null
handleNullableFunction(nullFunction) // 출력: Function is null
}
고차 함수는 코틀린에서 함수형 프로그래밍을 지원하는 강력한 기능 중 하나입니다. 이를 통해 코드의 재사용성과 추상화 수준을 높일 수 있습니다. 함수형 프로그래밍은 불변성, 일급 함수, 고차 함수 등의 개념을 기반으로 하며, 이는 코틀린에서 효과적으로 지원됩니다.
With ChatGPT