kotlin 람다 함수

 개인적으로 람다 함수는 영~~익숙해 지지 않는 면이 있어서 kotlin 을 좀 보는 김에 한번 정리를 해 봤습니다.

//3번
fun strLength3(s:String) : Int{
return s.length
}

fun printStrLength(s:String,p:(String)->Int){
println("String = " + s)
println("String Length = ${p(s)}" )
}

fun main() {
var strLength : (String) -> Int = {s -> s.length} //1번
var strLength2 = {s:String -> s.length} //2번

println("*".repeat(30))
println(strLength("Strike"))
println(strLength2("Air"))
println("*".repeat(30))

printStrLength("Hello, World!"){s:String -> s.length} //4번
println("*".repeat(30))

printStrLength("Water",strLength) //5번
println("*".repeat(30))

printStrLength("Bread",::strLength3) //6번
println("*".repeat(30))
}

1번이 정석대로의 선언방식이라고 합니다.

 

2번은 스마트 캐스팅을 이용한 선언이라던데(배우는 중이라 확실히는 모르겠습니다) 어쨌던 1번과 2번은 결과적으로 같은 내용입니다. 표현방법의 차이라고 할까요.

 

3번은 1번 2번과 같은데 흔히 사용하는 일반적인 함수로 만든거고요.

 

4번은 직접 함수 내용을 인자로 사용한것인데...원래대로라면 

printStrLength("Hello, World!",{s:String -> s.length})

이렇게 사용해야 하지만(실제로 이렇게 써도 됩니다) 위에 처럼 사용해도 된답니다. 사용상의 편이성을 위한 것인듯 합니다.

 

5번은 뭐....보시듯 저렇게 사용하면 된다는거고....

 

6번 일반 함수는 사용하려면 '::' 를 함수명 앞에 붙여야 한답니다.

 

한번에 정리해 봤습니다.

 

댓글