코드 여행 일기

코틀린의 함수: 정의부터 고차 함수까지 본문

kotlin

코틀린의 함수: 정의부터 고차 함수까지

할짝개발자 2024. 5. 29. 18:28
728x90
반응형

함수는 코드의 재사용성과 가독성을 높이는 중요한 구성 요소입니다.

코틀린(Kotlin)에서는 함수 정의와 호출이 간단하며, 람다식과 고차 함수와 같은 고급 기능도 지원합니다.

이번 포스트에서는 코틀린의 함수에 대해 자세히 알아보겠습니다.

 


 

함수 정의와 호출

코틀린에서 함수를 정의하는 기본 문법은 다음과 같습니다:

fun 함수이름(매개변수1: 타입, 매개변수2: 타입): 반환타입 {
    // 함수 본문
    return 반환값
}



예제: 간단한 함수 정의

fun greet(name: String): String {
    return "Hello, $name!"
}

fun main() {
    println(greet("Kotlin")) // 출력: Hello, Kotlin!
}

 

이 예제에서 greet 함수는 name이라는 문자열 매개변수를 받아 "Hello, name!" 형식의 문자열을 반환합니다.

 

반환 타입이 없는 함수

반환 타입이 없는 함수는 Unit 타입을 반환합니다. Unit은 Java의 void와 유사하며, 생략할 수 있습니다.

fun printGreeting(name: String) {
    println("Hello, $name!")
}

fun main() {
    printGreeting("Kotlin") // 출력: Hello, Kotlin!
}

 

기본 매개변수

코틀린에서는 함수 매개변수에 기본값을 지정할 수 있습니다. 기본값이 지정된 매개변수는 호출 시 생략할 수 있습니다.

fun greet(name: String = "Guest"): String {
    return "Hello, $name!"
}

fun main() {
    println(greet()) // 출력: Hello, Guest!
    println(greet("Kotlin")) // 출력: Hello, Kotlin!
}

 

명명된 매개변수

함수를 호출할 때 매개변수의 이름을 명시할 수 있습니다.

이를 통해 매개변수의 순서와 상관없이 값을 전달할 수 있습니다.

fun greet(greeting: String, name: String): String {
    return "$greeting, $name!"
}

fun main() {
    println(greet(name = "Kotlin", greeting = "Hi")) // 출력: Hi, Kotlin!
}

 

가변 인자

가변 인자(vararg)를 사용하면 하나의 매개변수에 여러 개의 인자를 전달할 수 있습니다.

fun greetAll(vararg names: String) {
    for (name in names) {
        println("Hello, $name!")
    }
}

fun main() {
    greetAll("Kotlin", "Java", "Python") 
    // 출력: 
    // Hello, Kotlin!
    // Hello, Java!
    // Hello, Python!
}

 

고차 함수와 람다식

고차 함수는 함수를 매개변수로 받거나 반환하는 함수입니다. 람다식은 익명 함수로, 고차 함수와 함께 자주 사용됩니다.

 

예제: 함수 타입 매개변수

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) // 출력: 8
}

 

이 예제에서 calculate 함수는 두 정수와 이들을 인자로 받는 함수를 매개변수로 받아 결과를 반환합니다.

 

예제: 람다식

람다식은 중괄호 {} 안에 매개변수와 함수 본문을 작성합니다.

val sum: (Int, Int) -> Int = { x, y -> x + y }

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

 

확장 함수

확장 함수는 기존 클래스에 새로운 함수를 추가하는 기능입니다. 클래스 내부를 수정하지 않고도 함수를 추가할 수 있습니다.

fun String.greet(): String {
    return "Hello, $this!"
}

fun main() {
    val name = "Kotlin"
    println(name.greet()) // 출력: Hello, Kotlin!
}

 

인라인 함수

인라인 함수는 함수 호출을 함수 본문으로 대체하여 성능을 최적화합니다. 특히 고차 함수에서 유용합니다.

inline 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) // 출력: 8
}

 

재귀 함수

재귀 함수는 함수 내부에서 자기 자신을 호출하는 함수입니다. 종료 조건을 명확히 설정해야 무한 루프를 방지할 수 있습니다.

fun factorial(n: Int): Int {
    return if (n <= 1) 1 else n * factorial(n - 1)
}

fun main() {
    println(factorial(5)) // 출력: 120
}

 

언제 어떤 함수를 사용할까?

  • 일반 함수: 반복적으로 사용되는 코드를 묶어 재사용성을 높일 때.
  • 기본 매개변수: 함수 호출 시 특정 매개변수의 기본값을 제공할 때.
  • 고차 함수와 람다식: 함수를 인자로 받거나 반환하여 유연한 코드를 작성할 때.
  • 확장 함수: 기존 클래스에 새로운 기능을 추가할 때.
  • 인라인 함수: 고차 함수 호출의 오버헤드를 줄여 성능을 최적화할 때.
  • 재귀 함수: 문제를 작은 부분으로 나누어 해결할 때.

 

코틀린의 다양한 함수 기능을 활용하면 코드의 가독성과 효율성을 높일 수 있습니다.

이 포스트가 코틀린의 함수에 대한 이해를 돕기를 바랍니다. 

728x90
반응형