[Kotlin] 람다

강승구·2022년 12월 31일
0

함수형 프로그래밍

함수형 프로그래밍에 대한 정의는 다음과 같다.

하나의 프로그래밍 패러다임으로 정의되는 일련의 코딩 접근 방식이며, 자료처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임을 의미한다.

함수형 프로그래밍의 특징

1. 순수 함수

순수함수는 동일한 입력 인자에 대해 항상 같은 결과값을 반환하는 함수이다.

순수함수의 조건

  • 같은 인자에 대하여 항상 같은 값이어야함.
  • 함수 외부의 어떤 상태도 바뀌지 않는다.

2. 고차 함수

3. 일급 객체

4. 불변성

람다식의 정의는 함수 정의와 비슷하게 다음과 같은 요소로 이루어진다.

  • 파라미터 목록 : result, op
  • 람다식의 본문이 되는 식 : result + op

함수 정의와 달리 반환 타입을 지정할 필요가 없으며 람다의 본문의 맨 마지막에 있는 식이 람다의 결과값이 된다. 이때 반환 타입은 자동으로 추론된다.

람다가 함수의 마지막 파라미터인 경우, 함수를 호출할 때 인자를 둘러싸는 괄호 밖에 람다를 위치시킬 수 있다. (코틀린에서는 이러한 코드 스타일을 권장하고 있다.)

람다에 인자가 없으면 화살표 기호를 생략할 수 있다.

fun measureTime(action: () -> Unit): Long {
    val start = System.nanoTime()
    action()
    return System.nanoTime() - start
}

val time = measureTime { 1 + 2 }

코틀린에서는 인자가 하나밖에 없는 람다를 특별히 단순화해 사용할 수 있는 문법을 제공한다. 람다 인자가 하나인 경우에는 파라미터 목록과 화살표 기호를 생략하고 유일한 파라미터는 it을 이용해 가르킬 수 있다.

fun check(s: String, condition: (Char) -> Boolean): Boolean {
    for(c in s) if(condition(c)) return true
    return false
}

fun main(){
    println(check("Hello") {it.isLowerCase()})
}

람다의 파라미터 목록에서 사용하지 않는 람다 파라미터는 밑줄 기호(_)로 지정할 수 있다.


자바에서의 람다와는 다르게 코틀린의 람다는 외부 영역의 가변 변수 값을 변경할 수 있다.

fun forEach(numbers: IntArray, action: (Int) -> Unit){
    for(n in numbers){
        action(n)
    }
}

fun main(){
    var sum = 0
    
    forEach(intArrayOf(1,2,3,4)) { 
        sum += it 
    }
    
    println(sum) //10 출력
}
profile
강승구

0개의 댓글