코틀린 함수와 람다 표현식

함수 기초

코드 블록 함수 본문

fun calculateArea(width: Int, height: Int): Int {
    return width * height
}

표현식 함수 본문

fun calculateArea(width: Int, height: Int) = width * height
표현식 함수 본문을 사용할 경우 일반적으로 반환값 타입을 명시하지 않아도 됩니다. 하지만 재귀와 같은 복잡한 경우에는 표현식 함수 본문을 사용하더라도 반환값 타입을 명시해야 합니다.

함수 선얝 규칙

  1. 함수 매개변수는 반드시 타입을 명시해야 합니다
  2. 표현식이 아닌 함수 본문에서는 반환값 타입이 Unit인 경우를 제외하고는 모두 명시해야 합니다
  3. 재귀 함수인 경우 매개변수와 반환값 타입을 반드시 명시해야 합니다
  4. 공개 메서드의 경우 코드 가독성을 위해 함수 매개변수와 반환값 타입을 명시하는 것이 좋습니다

함수 타입

코틀린에서 함수 타입은 다음과 같은 형식을 가집니다:
() -> Unit
코틀린의 함수 타입 선언은 다음 규칙을 따라야 합니다:
  1. -> 기호를 사용하여 매개변수 타입과 반환값 타입을 구분합니다 (왼쪽: 매개변수, 오른쪽: 반환값)
  2. 매개변수 타입은 반드시 괄호로 묶어야 합니다
  3. 반환값 타입이 Unit인 경우에도 명시해야 합니다
클래스의 메서드를 참조하기 위해 `::`를 사용할 수 있습니다:
class DataProcessor {
    fun process(data: String)
}
다음과 같이 process() 메서드를 참조할 수 있습니다:
val processor = DataProcessor()
val operation = processor::process
operation.invoke("sample data")

람다 표현식

기본적인 람다 표현식:
val multiply: (Int, Int) -> Int = {x: Int, y: Int -> x * y}
타입 추론을 지원하므로 다음과 같이 간소화할 수 있습니다:
val multiply: (Int, Int) -> Int = {x, y -> x * y}
또는:
val multiply = {x: Int, y: Int -> x * y}

람다 표현식 문법

  1. 람다 표현식은 {}로 감싸야 합니다
  2. 람다 매개변수 타입을 명시하고 반환값 타입이 추론 가능한 경우, 람다 변수의 함수 타입 선언을 생략할 수 있습니다
  3. 람다 변수에 함수 타입이 선언된 경우, 람다 표현식의 매개변수 타입을 생략할 수 있습니다
  4. 람다 표현식이 Unit 타입을 반환하지 않는 경우, 마지막 줄 표현식의 값이 반환값 타입이 됩니다

함수와 람다 표현식의 관계

함수 선언 방식

  1. fun 키워드로 등호가 없고 중괄호만 있는 경우 코드 블록 함수 본문이며, 반환값이 Unit가 아닐 경우 return이 필요합니다
fun displayMessage(message: String) {
    println(message)
}

fun addNumbers(a: Int, b: Int): Int {
    return a + b
}
  1. fun 키워드로 등호가 있고 중괄호가 없는 경우 단일 표현식 함수 본문이며, return을 생략할 수 있습니다
fun addNumbers(a: Int, b: Int) = a + b
  1. val이나 fun으로 선언하고 등호와 중괄호를 사용하면 람다 표현식을 선언하는 것입니다
val calculate = { x: Int, y: Int ->
    x * y
}
// 호출 방법: calculate.invoke(3, 4) 또는 calculate(3, 4)

val createMultiplier = { factor: Int ->
    { number: Int -> number * factor }
}
// 호출 방법: createMultiplier(2).invoke(5) 또는 createMultiplier(2)(5)
  1. 람다 표현식의 자체 호출
{ x: Int, y: Int -> x - y }(10, 5)

태그: 코틀린 함수 람다 함수형 프로그래밍

7월 16일 23:02에 게시됨