inline
inline
함수란 무엇일까요? 🤔 inline
함수는 컴파일 시에 함수 호출이 함수의 본문으로 대체되는 함수입니다(직접 코드가 들어가게 됩니다).
inline
👻fun main() {
println(test1(1) {n -> n*2})
}
inline fun test1(num: Int, operation: (Int) -> Int) : Int {
return operation(num)
}
이 함수는 inline
키워드를 사용합니다. operation
이라는 람다를 인자로 받고 있습니다. 이 함수가 호출되면, operation
람다의 내용이 실제 호출 지점에 삽입됩니다. 실제로 바이트코드를 디컴파일 해보면 아래와 같이 나오는 것을 알 수 있습니다.
사진을 보면 main함수에서 함수 호출 부분을 보면 작성했던 코드가 그대로 박혀 있는 것을 볼 수 있습니다.
또한 파라미터 안에 들어간 함수까지 전부 인라인화 시킨 것을 확인 할 수 있습니다.
fun test1(num: Int, operation: (Int) -> Int) : Int {
return operation(num)
}
이 버전의 test1
은 inline
이 적용되지 않은 일반 함수입니다. 람다를 인자로 받지만, inline
함수와 달리 람다의 코드가 호출 지점에 삽입되지 않습니다.
위에서 본 것과는 다르게 (Function1)이라는 객체가 있는 것을 볼 수 있습니다.
만약 파라미터에 들어온 메소드를 인라인화 시키고 싶지 않다면 noline
을 붙여주시면 됩니다.
inline fun test1(num: Int, noinline operation: (Int) -> Int) : Int {
return operation(num)
}
main을 보면 invoke()
를 통해 호출 하는 코드가 있는 것을 볼 수 있습니다.(인라인을 했다면 코드가 그대로 박혀있어야 합니다.)
inline
함수는 적절히 사용하면 Kotlin에서 성능을 향상시키는 좋은 방법입니다. 하지만 모든 함수에 inline
을 사용하는 것은 아닙니다. 함수의 크기와 호출 빈도를 고려하여 적절한 상황에서 사용해야 합니다. 🎯