[kotlin] 고차함수

야매·2022년 10월 10일
0

🟦 고차함수란?

  • 함수를 마치 클래스에서 만들어낸 인스턴스처럼 취급하는 방법이다.
  • 함수를 파라미터처럼 넘겨줄수도 있고, 결과값으로 반환받을 수 있는 방법이다.
  • kotlin에서는 모든 함수를 고차함수로 사용이 가능하다.
  • android의 setOnclickListner같은 콜백 함수가 고차함수에 속한다.
fun main() {
    b(::a)
    val c: (String)->Unit = {str -> println("$str 람다함수")} 
    //이미 파라미터 타입이 String으로 명시되어 있기 때문에 {}안에 데이터 타입을 적을 필요가 없다.
    // val c = {str:String -> println("$str 람다함수")} 
    // 타입추론이 가능하기 때문에 굳이 변수의 타입을 명시하지 않아도 된다. 
    b(c)
}
fun a (str: String){
    println("$str 함수 a")
}
fun b (function: (String)->Unit){
    function("b가 호출한")
}


[result]
/// b가 호출한 함수 a
/// b가 호출한 람다함수

b 함수는 함수 a를 고차함수 형식의 파라미터로 받을 수 있도록 한다. 함수를 받을 파라미터를 function으로 하고 자료형은 a함수의 형식을 넘겨받는다.

이런식으로 한다면 기술한 형태와 같은 함수는 모두 파라미터로 받을 수 있다. a함수는 String형태로 받고, 반환형은 없으므로 Unit을 써주면 된다. 그리고 { } 안에는 받아온 함수인 function을 실행하되 문자열로 b가 호출한이라는 값을 넘겨준다.

main 함수에서는 함수b를 호출하되 함수a를 파라미터로 넘겨준다. 고차함수 형태로 넘기려면 함수 이름 앞에 콜론을 2개 붙이면 된다.

main 함수가 a함수를 b함수에 파라미터로 넘겼고 b함수는 받아온 a함수에 "b가 호출한"이라는 값을 넘겨서 호출했다. 최종적으로 a함수가 실행되면서 "b가 호출한 함수 a"라는 문자열이 출력되는 것을 확인할 수 있다.

0개의 댓글