본문 바로가기

Language/Kotlin

[Kotlin] 고차함수와 람다함수

728x90
반응형

고차함수

: 함수를 마치 클래스에서 만들어 낸 인스턴스처럼 취급하는 방법. 함수를 파라미터로 넘겨줄 수도 있고 결과값으로 반환받을 수도 있다.

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

 

  • 함수의 형식은 (자료형, 자료형, …) → 자료형으로 나타낸다.
  • 일반 함수를 고차 함수로 변경해주는 연산자 - 함수 이름 앞에 콜론 두 개 (::함수명)
fun main(){
    b(::a)  // 출력: b가 호출한 함수 a
}

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

fun b(function: (String) -> Unit){
    function("b가 호출한")
}
  • Unit: 값이 없다는 형식

패러미터로 넘길 함수를 굳이 이름까지 붙여 따로 만들 필요가 있을까?

→ 함수를 람다식으로 표현

람다함수

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

fun main(){
    val c: (String) -> Unit = { str -> println("$str 람다함수") }  
    // * str은 String으로 받아온 값을 람다함수 내에서 사용할 변수 이름
    b(c)  // 출력: b가 호출한 람다함수
}

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

 

람다함수를 변수에 할당할 때는 타입추론 기능을 이용하여 좀 더 축약해서 기술할 수 있다.

→ 함수의 형식을 적지 않고 중괄호 안에 파라미터의 자료형 기술

fun main(){
    val c = { str:String -> println("$str 람다함수") }
    b(c)  // 출력: b가 호출한 람다함수
}

fun b(function: (String) -> Unit){
    function("b가 호출한")
}
728x90
반응형

'Language > Kotlin' 카테고리의 다른 글

[Kotlin] 오브젝트  (0) 2023.09.09
[Kotlin] 스코프 함수  (0) 2023.09.07
[Kotlin] 스코프와 접근제한자  (0) 2023.09.06
[Kotlin] 기본 프로젝트 구조  (0) 2023.09.05
[Kotlin] 오버라이딩, 추상화, 인터페이스  (0) 2023.09.05