Kotlin/포스팅

코틀린 인라인 함수

짜집퍼박사(짜박) 2024. 1. 7. 12:10

코틀린에서의 인라인 함수(Inline Function)은 호출하는 곳에 함수의 본문을 복사하여 넣어줌으로써 함수 호출의 오버헤드를 최소화하는 기능을 제공합니다. 즉, 함수를 호출하는 것이 아니라 함수의 본문이 호출되는 곳에 삽입되어 실행됩니다.

인라인 함수는 주로 고차 함수와 함께 사용되며, 람다 함수를 매개변수로 전달할 때 발생하는 오버헤드를 줄이는 데 유용합니다.

 

인라인 함수 선언

inline fun <T> myInlineFunction(action: () -> T): T {
    println("Before action")
    val result = action()
    println("After action")
    return result
}

위의 함수 myInlineFunction은 람다 함수 action을 받아 실행하고, 실행 전후에 메시지를 출력합니다.

 

인라인 함수 호출

fun main() {
    val result = myInlineFunction {
        println("Executing action")
        42
    }
    println("Result: $result")
}

위의 코드에서 myInlineFunction 함수를 호출하면, 함수의 본문이 람다 함수가 있는 곳으로 인라인되어 삽입됩니다. 따라서 실행 결과는 다음과 같습니다.

Before action
Executing action
After action
Result: 42

 

인라인 함수의 특징과 제약

1. 함수 본문의 복사: 인라인 함수는 호출하는 곳에 함수 본문을 복사하기 때문에 함수가 호출될 때마다 함수의 본문이 복사되어 삽입됩니다.
2. 메모리 사용 증가: 인라인 함수의 사용은 코드 크기가 커지고, 따라서 메모리 사용이 증가할 수 있습니다. 작은 함수나 빈번하게 호출되는 함수에 사용하는 것이 좋습니다.
3. 람다 함수 처리: 인라인 함수는 주로 람다 함수를 처리할 때 이점이 있습니다. 람다 함수를 인자로 받는 고차 함수는 람다 함수를 실행할 때마다 객체를 생성하는데, 인라인 함수를 사용하면 이러한 객체 생성이 줄어들어 성능이 향상됩니다.

inline fun measureTime(action: () -> Unit) {
    val startTime = System.currentTimeMillis()
    action()
    val endTime = System.currentTimeMillis()
    println("Time taken: ${endTime - startTime} ms")
}

fun main() {
    measureTime {
        // 작업 수행
    }
}

인라인 함수는 성능 최적화와 코드 간결성을 동시에 제공하는데, 특히 람다 함수와 함께 사용될 때 효과적입니다. 그러나 작은 함수나 빈번하게 호출되는 함수에만 사용하는 것이 좋습니다.

 

With ChatGPT

'Kotlin > 포스팅' 카테고리의 다른 글

코틀린 쓰레드  (0) 2024.01.07
코틀린 동시성  (0) 2024.01.07
코틀린 예외 선언  (0) 2024.01.07
코틀린 오버로딩한 메서드 생성  (0) 2024.01.07
코틀린 노출된 선언 이름 변경  (0) 2024.01.07