본문 바로가기
Kotlin Language/Kotlin 기본 문법

Kotlin(코틀린) - 람다함수 (Lambda Expression)

by Classic Master 2023. 12. 3.
728x90

람다 표현식 ( Kotlin Lambda Expression ) ? 

  • 람다식(Lambda expressions)은 간결하게 표현된 익명 함수입니다. 람다식은 함수형 프로그래밍의 핵심 요소 중 하나로, 코드를 간결하게 작성하고 함수를 일급 객체로 다룰 수 있게 해줍니다.
  • 간단히 람다라고도 불리며, 익명 함수(Anonymouse function)를 의미하기도 합니다. 익명 함수는 함수의 이름이 없는 혹은 생략한 함수를 말하며, 보통 한번 사용되고 재사용되지 않는 함수를 만들때 익명 함수로 만드는데, 변수에 대입하여 이용하거나 콜백 함수에 지정할 수 있다. 그러기에 함수를 따로 생성하지 않고, 코드에 익명 함수를 만들어 코드 가독성을 높일 수 있다. 이는 함수형 프로그래밍에서 자주 사용하는 패턴입니다.
  • 람다식은 주로 고차함수(higher-order functions)와 함께 사용됩니다

람다식 사용방법

val lambdaName: (parameterType) -> returnType = { parameters -> functionBody }
  • lambdaName은 람다식을 참조하는 변수명이고, parameterType은 람다식의 매개변수 타입, returnType은 반환 타입입니다. 중괄호 {} 안에는 실제로 실행될 코드인 functionBody가 들어갑니다.
val add: (Int, Int) -> Int = { a, b -> a + b }
println(add(3, 5)) // 출력: 8
  • add는 변수명이고, (Int, Int)는 매개변수 타입을 나타내며 Int는 반환 타입입니다. 중괄호 안에 있는 a + b는 두 정수를 더하는 코드입니다. 따라서 add(3, 5)는 3과 5를 더한 결과인 8을 출력합니다.

람다식 사용방법 ( 함수 추론 ) 

val sum = {x:Int, y:Int -> x+y}
val two = {println(33)}
fun main(args: Array) {
    val sum = { x: Int, y: Int -> println("실행합니다 $x 와 $y")
       x + y
    }
    println(sum(3,4))
}
  1. val sum = { x: Int, y: Int -> ... } sum이라는 변수에 람다식을 할당합니다. 이 람다식은 두 개의 정수 매개변수 x와 y를 받아서 두 번째 줄의 코드 블록을 실행합니다.
  2. 람다식의 코드 블록 부분에서는 먼저 "실행합니다"라는 문자열과 람다식에 전달된 매개변수 x와 y를 출력합니다.
  3.  x + y를 계산하여 결과를 반환합니다. 이 값은 sum 변수에 저장됩니다.
  4. 마지막으로 sum 변수에 할당된 람다식을 호출하고, 람다식의 실행 결과가 출력됩니다. 여기서는 "실행합니다 3 와 4"와 함께 두 숫자의 합인 7이 출력됩니다.

리스트의 각 요소에 대해 람다식을 적용하는 고차함수 map의 예제입니다.

val numbers = listOf(1, 2, 3, 4, 5)
val squaredNumbers = numbers.map { it * it }
println(squaredNumbers) // 출력: [1, 4, 9, 16, 25]
  • map 함수는 리스트의 각 요소에 대해 주어진 람다식을 적용하여 새로운 리스트를 생성합니다.

람다식 상황에 따른 예제

숫자필터링

  • 주어진 리스트에서 짝수만 필터링하는 람다식
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val evenNumbers = numbers.filter { it % 2 == 0 }
println(evenNumbers) // 출력: [2, 4, 6, 8, 10]

 

사용자의 조건에 따른 필터링

  • 문자열 리스트에서 길이가 5 이상인 문자열만 필터링하는 람다식
val words = listOf("apple", "banana", "orange", "grape", "kiwi")
val longWords = words.filter { it.length >= 5 }
println(longWords) // 출력: [banana, orange]

 

두 리스트의 각 요소를 더한 결과 리스트 생성

  • 두 리스트의 각 요소를 더한 결과 리스트를 생성하는 람다식
val list1 = listOf(1, 2, 3)
val list2 = listOf(4, 5, 6)
val sumList = list1.zip(list2) { a, b -> a + b }
println(sumList) // 출력: [5, 7, 9]

 

조건에 따른 매핑

  • 숫자 리스트에서 각 숫자를 2배로 만들되, 5보다 작은 경우에만 적용하는 람다식
val numbers = listOf(3, 8, 2, 6, 12, 4)
val doubledUnderFive = numbers.map { if (it < 5) it * 2 else it }
println(doubledUnderFive) // 출력: [6, 16, 4, 12, 12, 8]

 

사용자 입력에 따른 동적동작

  • 사용자에게 입력받은 연산자에 따라 두 숫자를 계산하는 람다식
print("첫 번째 숫자를 입력하세요: ")
val num1 = readLine()!!.toDouble()

print("두 번째 숫자를 입력하세요: ")
val num2 = readLine()!!.toDouble()

print("연산자를 입력하세요 (+, -, *, /): ")
val operator = readLine()!!

val calculate: (Double, Double) -> Double = when (operator) {
    "+" -> { a, b -> a + b }
    "-" -> { a, b -> a - b }
    "*" -> { a, b -> a * b }
    "/" -> { a, b -> if (b != 0.0) a / b else Double.NaN }
    else -> { _, _ -> Double.NaN }
}

val result = calculate(num1, num2)
println("결과: $result")

 

728x90
반응형