고차 함수와 람다 표현식 - swkim0128/PARA GitHub Wiki

1. 고차 함수 (Higher-Order Functions)

고차 함수란?

  • 고차 함수다른 함수를 매개변수로 받거나, 반환값으로 함수를 반환하는 함수를 말합니다.
  • 함수를 값처럼 다루는 특징이 있습니다.

고차 함수의 문법

fun 함수이름(매개변수: (매개변수 타입) -> 반환타입): 반환타입 {
    // 함수 본문
}

고차 함수 예제

1. 함수를 매개변수로 받는 고차 함수

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
}

2. 함수를 반환하는 고차 함수

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
}

2. 람다 표현식 (Lambda Expressions)

람다 표현식이란?

  • 람다 표현식은 익명 함수로, 이름 없이 함수처럼 사용할 수 있는 표현식입니다.
  • 간단한 함수를 작성할 때 유용합니다.

람다 표현식의 문법

{ 매개변수1: 타입, 매개변수2: 타입 -> 반환값 }

람다 표현식 예제

1. 기본 람다

val sum = { a: Int, b: Int -> a + b }

fun main() {
    println(sum(5, 3)) // 출력: 8
}

2. 타입 추론

  • 코틀린은 람다 표현식의 매개변수 타입을 추론할 수 있습니다.
val multiply = { x: Int, y: Int -> x * y }

fun main() {
    println(multiply(4, 5)) // 출력: 20
}

3. 람다와 고차 함수의 활용

1. 컬렉션 처리

  • 코틀린의 컬렉션 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]
}

2. it 키워드

  • 람다 표현식에서 매개변수가 하나인 경우, 이름을 명시하지 않고 it 키워드를 사용할 수 있습니다.
fun main() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val squared = numbers.map { it * it }
    println(squared) // 출력: [1, 4, 9, 16, 25]
}

4. 인라인 함수와 고차 함수

  • 고차 함수는 런타임 시 함수 호출 비용이 발생할 수 있습니다.
  • 인라인 함수 (inline)는 고차 함수의 호출 비용을 줄이기 위해 사용됩니다.

인라인 함수 예제

inline fun execute(action: () -> Unit) {
    action()
}

fun main() {
    execute {
        println("Hello, Inline Function!")
    }
}

5. 익명 함수 (Anonymous Functions)

  • 람다 표현식과 유사하지만, 명시적으로 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
}

6. 고차 함수와 람다의 차이점

특징 고차 함수 람다 표현식
정의 위치 함수로 정의 익명 함수로 사용
반환 타입 함수 타입을 반환 가능 이름 없는 함수로 직접 사용
사용 목적 함수 호출 및 반환 간결한 함수 표현

요약

1. 고차 함수:

  • 함수를 매개변수로 전달하거나, 반환값으로 함수를 반환할 수 있음.
  • 코틀린의 컬렉션 함수(map, filter, reduce)에서 자주 사용.

2. 람다 표현식:

  • 익명 함수로, 간결하게 함수를 정의할 수 있음.
  • it 키워드를 사용해 매개변수를 간단히 참조 가능.

3. 인라인 함수:

  • 고차 함수의 성능 문제를 해결하기 위해 사용.

고차 함수와 람다 표현식은 코틀린의 함수형 프로그래밍 패러다임을 지원하며, 코드의 간결성과 가독성을 높이는 데 유용합니다.

⚠️ **GitHub.com Fallback** ⚠️