본문 바로가기
Language/Kotlin

Inline 함수란?

by 시니성 2023. 9. 4.

inline 키워드는 코틀린에서 함수를 선언할 때 사용될 수 있습니다. inline 함수는 컴파일 시점에 해당 함수 호출 위치에 함수의 바디(본문)를 직접 삽입합니다. 다시 말해, 함수를 호출하는 것처럼 보이지만 실제로는 해당 코드가 그대로 복사되어 사용되는 것입니다.

그럼 왜 inline 함수를 사용할까요?

  1. 성능 최적화: 특히 람다를 매개변수로 받는 함수에서 유용합니다. 람다를 사용할 때 발생하는 객체 생성이나 함수 호출로 인한 오버헤드를 줄여줍니다.
  2. 익명 클래스 생성 방지: 람다는 내부적으로 익명 클래스로 변환됩니다. inline 함수를 사용하면 이러한 클래스의 생성을 방지할 수 있습니다.

예시 시나리오

웹 서비스에서 특정 조건을 만족하는 사용자 데이터를 필터링하려 합니다. 이때, 다양한 조건을 유연하게 적용하기 위해 람다를 인자로 받는 함수를 사용하려 합니다. 이 함수는 많은 데이터에 대해 반복적으로 호출되기 때문에 성능을 최적화해야 합니다.

예시 코드

data class User(val id: Int, val name: String, val age: Int)

// inline 함수 선언
inline fun List<User>.filterUsers(condition: (User) -> Boolean): List<User> {
    return filter(condition)
}

fun main() {
    val users = listOf(
        User(1, "Alice", 25),
        User(2, "Bob", 30),
        User(3, "Charlie", 29),
        User(4, "David", 31)
    )

    // 30세 이상의 사용자만 필터링
    val filteredUsers = users.filterUsers { it.age >= 30 }
    println(filteredUsers)
}

// 출력 결과: [User(id=2, name=Bob, age=30), User(id=4, name=David, age=31)]

위의 예시에서 filterUsers 함수는 inline 키워드를 사용하여 선언되었습니다. 따라서 filterUsers 함수를 호출할 때 실제로는 filter 함수의 코드가 그대로 filterUsers 호출 위치에 삽입되어 실행됩니다.

주의사항

  • 모든 함수에 inline을 사용하는 것은 바람직하지 않습니다. 짧은 함수나 람다를 매개변수로 받는 함수에 주로 사용됩니다.
  • inline 함수 내부에서 너무 많은 코드가 포함되면, 해당 함수가 여러 번 호출될 때 코드가 중복으로 많이 생성되어 바이트 코드(컴파일된 코드) 크기가 커질 수 있습니다.

마지막으로, inline은 성능 최적화를 위한 도구 중 하나일 뿐, 항상 필요한 경우가 아닙니다. 성능이 중요한 상황에서만 적절히 사용하는 것이 좋습니다.

728x90