기록

[코틀린/Kotlin] 고차함수와 람다함수 본문

[Study]/Kotlin

[코틀린/Kotlin] 고차함수와 람다함수

Dannnnnn 2022. 5. 7. 06:29
반응형

1.  고차함수

함수를 마치 클래스에서 만들어낸 인스턴스처럼 취급하는 방법.

함수를 '파라미터'로 넘겨 줄 수도 있고, '결과값으로 반환'받을 수도 있는 방법이다.

 

코틀린에서는 모든 함수를 고차함수로 사용 가능하다.

 

함수의 형식을 자료형으로 나타내는 방법

(파라미터 자료형들) -> 반환형

 

고차함수 형태로 파라미터를 넘기는 방법은 함수 이름 앞에 콜론을 두개 붙인다.

::는 일반함수를 고차함수로 변경해주는 연산자이다.

 

fun main() {
    b(::a)
}

fun a(str: String) {
    println("$str 함수 a")
}

fun b(function: (String)->Unit) {
    function("b가 호출한")
}

2.  람다함수

파라미터로 넘길 함수를 굳이 이름까지 붙여 만들어줄 필요가 있을까?

이때 함수를 람다식으로 표현하는 람다함수를 사용할 수 있다.

 

람다함수는 일반함수와 달리 그 자체가 고차함수이기 때문에 별도의 연산자 없이 변수에 담을 수 있다.

 

fun main() {
    
    b(::a)
    
    // 변수 c를 생성하여 콜론 뒤에 함수의 형식을 써본다.
    // = 뒤에 중괄호를 붙여 파라미터로 받아온 String을 매칭할 변수 이름을 써준다
    // (* str은 String으로 받아온 값을 람다함수 내에서 사용할 변수 이름이다.)
    // 이 파라미터로 동작시킬 구문을 기술하기 위해 -> 를 써주고 그 뒤에 출력문을 써본다.
    var c: (String)->Unit = {str -> println("$str 람다함수")}
    b(c)
    
}

fun a(str: String) {
    println("$str 함수 a")
}

fun b(function: (String)->Unit) {
    function("b가 호출한")
}

 

람다함수 역시 변수에 할당할 때는 이전에 배운 타입추론 기능을 이용해 좀 더 축약해서 기술할 수 있다.

 

fun main() {
    
    b(::a)
    
    // 함수의 형식(자료형)을 기술하지 않고 람다식 안에 파라미터의 자료형을 기술하면
    // 파라미터와 리턴값의 형식이 자동으로 추론된다.
    var c = {str: String -> println("$str 람다함수")}
    b(c)
    
}

fun a(str: String) {
    println("$str 함수 a")
}

fun b(function: (String)->Unit) {
    function("b가 호출한")
}
고차함수와 람다함수를 사용하면 함수를 일종의 변수로 사용할 수 있다.
이후 배울 컬렉션의 조작이나 스코프 함수의 사용에도 도움이 된다.

 

 

https://www.youtube.com/watch?v=q7GV68jKLVM&list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN&index=14

위 강의를 보면서 개인적으로 공부한 내용을 정리하였습니다.

반응형