fun main() {
    val result = callByValue(lambda())	//값에 의한 호출
    println(result)

    val result2 = callByName(lambda)	//이름에 의한 호출
    println(result2)
}

fun callByValue(b: Boolean): Boolean {
    println("callByValue function")
    return b
}

fun callByName(b : ()-> Boolean) : Boolean {
    println("callByName function")
    return b();
}

val lambda: () -> Boolean = {
    println("lambda function")
    true
}

위의 코드를 실행하면 아래와 같은 결과가 나온다.

 

lambda function
callByValue function
true

callByName function
lambda function
true

 

순서가 바뀌는 이유는 무엇일까?

 

값에 의한 호출은 메소드에서 람다식을 호출하면서 람다식을 먼저 수행한 뒤 해당 값을 사용하고

이름에 의한 호출은 메소드에서 람다식 자체를 가져가서 사용하므로 

실제로 메소드 내에서 람다식을 실행할 때 수행되기 때문이다.

'개발 > Kotlin' 카테고리의 다른 글

코틀린 공부 - 함수 (4) also, apply  (0) 2021.08.03
코틀린 공부 - 함수(4) - let / run  (0) 2021.08.03
코틀린 공부 - 함수(2)  (0) 2021.08.02
코틀린 공부 - 함수(1)  (0) 2021.08.02
코틀린 기초 5 - object  (0) 2020.06.25

+ Recent posts