[Kotlin] 람다

유존돌돌이·2023년 3월 24일
0

Kotlin

목록 보기
10/10
post-thumbnail

사용될 list 선언

val fruits = listOf<Fruit>(
        Fruit("사과", 1_000),
        Fruit("사과", 1_200),
        Fruit("사과", 1_200),
        Fruit("사과", 1_500),
        Fruit("바나나", 3_000),
        Fruit("바나나", 3_200),
        Fruit("바나나", 2_500),
        Fruit("수박", 10_000),
    )

람다 만드는법

1. 노네임 함수선언

    val isApple1 = fun(fruit: Fruit): Boolean {
        return fruit.name == "사과"
    }
    
    // 타입 선언 (파라미터타입) -> 반환타입
    val isApple1_1: (Fruit) -> Boolean = fun(fruit: Fruit): Boolean {
        return fruit.name == "사과"
    }

2. 중괄호 안에 화살표로 선언

    val isApple2 = {fruit: Fruit -> fruit.name == "사과"}
    
    // 타입 선언 (파라미터타입) -> 반환타입
    val isApple2_1: (Fruit) -> Boolean = {fruit: Fruit -> fruit.name == "사과"}

람다 호출 방법

    // 람다를 직접 호출하는 방법 1
    isApple1(fruits[0])
    // 람다를 직접 호출하는 방법 2
    isApple1.invoke(fruits[0])

람다 파라미터 호출

람다 사용 함수 선언

private fun filterFruits(
    fruits: List<Fruit>,
    fruitFilter: (Fruit)->Boolean // 람다
): List<Fruit> = fruits.filter {fruitFilter(it)}

호출

    filterFruits(fruits, isApple1 )
    // 직접 선언
    filterFruits(fruits, { fruit: Fruit -> fruit.name=="사과"} )
    // 마지막 파라미터가 함수인 경우 소괄호 밖에 람다사용 가능
    filterFruits(fruits) { fruit: Fruit -> fruit.name=="사과"}

Closure

    var par = "바나나"
    par = "수박"

    val ret = filterFruits(fruits) { it.name==par}

Closure란 Kotlin에서 람다가실행되고 있는 시점에 쓰고 있는 변수들을 모두 포획한다. 이 데이터구조를 Closure라고 한다. 그렇기 때문에 final이 아닌 변화하는 var 변수도 사용될 수 있다.

0개의 댓글