컴퓨터 언어/코틀린

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

훈츠 2020. 2. 14. 17:51
반응형

안녕하세요. 훈츠 입니다. 오늘은 고차 함수와 람다 함수에 대해 이야기 해 보겠습니다. 

고차 함수

함수를 마치 클래스에서 만들어낸 인스턴스 처럼 취급 하는 방법 입니다. 코틀린에서는 모든 함수를 고차함수로 사용 가능 하여, 함수를 파라메터로 넘겨 줄수도 있고, 결과값으로 반환 받을 수도 있습니다. 

fun main() {
  b(::a) //고차함수 출력할때 사용
}

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

//고차함수 예시
fun b(fc : (String) -> Unit){   //fun b(function : (자료형) -> 반환형
    fc("b 가 호출한")
}
//출력 
b 가 호출한 함수 a
함수의 형식(자료형, 자료형...) -> 함수의 반환형 //반환형이 없다면 "Unit" unit은 값이 없다는 뜻입니다. 

람다 함수

별도의 연산자 없이 함수를 담을수 있습니다. 

//c, d의 함수 자료형을 매개변수로 받는 함수 
fun b(fc : (String) -> Unit) {
    fc("b 가 호출한")
}
//e의 함수 자료형을 매개변수로 받는 함수
fun returnB(fc : (String) -> String) {
    val retStr = fc("b 가 호출한")
    println(retStr)
}

fun main() {
        //람다함수
        val c:(String) -> Unit = {str:String ->
            println("${str} c 람다함수")
        }
        //람다함수(자료형을 생략한)
        val d :(String) -> Unit = {str ->    
            println("${str} d 람다함수")
        }
        
        //람다함수 (리턴 타입이 있는) : 마지막 줄이 return 됩니다. 
        val e :(String) -> String = {str ->  
            println("${str} e 람다함수")
            "return message"
        }
    // 함수 호출
    b(c)
    b(d)
    returnB(e)

}

//출력 화면 
b 가 호출한 c 람다함수
b 가 호출한 d 람다함수
b 가 호출한 e 람다함수
return message

리턴 값이 있는 람다 함수

val calculate:(Int,Int) -> Int = {a,b ->
println(a)
println(b)
a+b //* 여기서는 마지막 구문이 a+b의 값을 Int로 반환 합니다. 
}    

파라미터가 없는 람다함수

val a: () -> Unit = {println("패러미터가 없어요")}

파라미터가 하나뿐인 람다함수 에서는 it을 사용

val a: (String) -> Unit = {println("$it 람다함수")}
//println 앞에 패러미터 이름을 생략가능. 

 

반응형