코틀린에서 고차 함수(higher-order function)는 다른 함수를 매개변수로 받거나 함수를 반환하는 함수를 말합니다. 고차 함수를 사용하면 코드를 더 유연하게 만들 수 있고, 함수형 프로그래밍의 특징을 활용할 수 있습니다. 아래에서 고차 함수의 여러 측면에 대해 자세히 알아보겠습니다.
1. 함수를 매개변수로 받는 고차 함수
fun operate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
return operation(a, b)
}
- operation 매개변수가 (Int, Int) -> Int 형식의 함수를 받습니다.
- operate 함수 내에서 operation(a, b)를 호출하여 매개변수로 받은 함수를 실행합니다.
2. 람다식을 이용한 호출
val sumResult = operate(5, 3) { a, b -> a + b }
val multiplyResult = operate(5, 3) { a, b -> a * b }
함수를 직접 정의하는 대신 람다식을 사용하여 고차 함수를 호출할 수 있습니다.
3. 함수를 반환하는 고차 함수
fun getOperation(operator: String): (Int, Int) -> Int {
return when (operator) {
"+" -> { a, b -> a + b }
"*" -> { a, b -> a * b }
else -> { _, _ -> 0 }
}
}
- getOperation 함수가 (Int, Int) -> Int 형식의 함수를 반환합니다.
- 반환되는 함수는 operator에 따라 다르게 동작합니다.
4. 고차 함수 예시
fun <T> List<T>.customFilter(predicate: (T) -> Boolean): List<T> {
val result = mutableListOf<T>()
for (item in this) {
if (predicate(item)) {
result.add(item)
}
}
return result
}
- 리스트를 필터링하는 고차 함수의 예시입니다.
- predicate 매개변수로 전달된 함수에 따라 필터링이 이루어집니다.
5. 인라인 고차 함수
inline fun executeInTransaction(database: SQLiteDatabase, action: () -> Unit) {
try {
database.beginTransaction()
action()
database.setTransactionSuccessful()
} finally {
database.endTransaction()
}
}
inline 키워드를 사용하여 함수 호출을 최적화하는 인라인 고차 함수의 예시입니다.
6. crossinline 키워드
inline fun executeInTransaction(crossinline action: () -> Unit) {
// ...
}
crossinline 키워드를 사용하여 람다식 안에서 비지역 반환을 금지하는 인라인 함수의 예시입니다.
고차 함수는 함수형 프로그래밍의 핵심 개념 중 하나이며, 코틀린은 함수형 프로그래밍을 지원하기 위한 다양한 기능을 제공합니다. 고차 함수를 활용하면 코드의 재사용성과 가독성을 높일 수 있습니다.
With ChatGPT
'Kotlin > 포스팅' 카테고리의 다른 글
코틀린 로컬 함수 (0) | 2023.12.17 |
---|---|
코틀린 익명 함수 (0) | 2023.12.17 |
코틀린 단일 표현식 함수 (0) | 2023.12.16 |
기본적인 함수의 특징 (0) | 2023.12.13 |
코틀린 함수 (0) | 2023.12.10 |