왼쪽은 sub() 함수를 사용할때마다 abc를 수행한다음에 오는 형식으로 총 2번이나 분기가 일어 난다 분기가 일어난다는 것은 새로운 stack frame이 만들어지고 또 그것을 관리해야 하기 때문에 작업 비용이 생기게 된다
이러한 문제를 해결 하기위해 inline 을 사용하게 되면
sub()가구현부 abc로 바뀌어서 해당 내용에 복사가 되어 분기가 일어나지 않는다
but
※ inline 함수에 내용이 많아지거나 자주 호출 할때마다 복사가 되므로 코드 사이즈가 커질수도 있다.
그래서
을 사용한다 noinline는 일부 람다식 함수를 inline 하지 않고 분기 하여 호출 된다
fun main() {
shortFunc(3) { println("첫번째 CALL: $it") }
}
inline fun shortFunc(a: Int, noinline out: (Int) -> Unit) {
println("before calling out()")
println(a)
println("after calling out()")
}
/*
실행결과
before calling out()
첫번째 CALL: 3
after calling out()
*/
실행 결과는 noinline 안썼을때와는 같지만 out(a) 이부분이 복사가 되지않고 분기 하여 호출하게된다