inline
키워드는 코틀린에서 함수를 선언할 때 사용될 수 있습니다. inline
함수는 컴파일 시점에 해당 함수 호출 위치에 함수의 바디(본문)를 직접 삽입합니다. 다시 말해, 함수를 호출하는 것처럼 보이지만 실제로는 해당 코드가 그대로 복사되어 사용되는 것입니다.
그럼 왜 inline 함수를 사용할까요?
- 성능 최적화: 특히 람다를 매개변수로 받는 함수에서 유용합니다. 람다를 사용할 때 발생하는 객체 생성이나 함수 호출로 인한 오버헤드를 줄여줍니다.
- 익명 클래스 생성 방지: 람다는 내부적으로 익명 클래스로 변환됩니다.
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
'Language > Kotlin' 카테고리의 다른 글
Gradle, Spring, Kotlin 환경에서의 build.gradle.kts 내 tasks 이해하기 (0) | 2023.09.13 |
---|---|
`reified`란? (0) | 2023.09.04 |
코틀린의 `joinToString()`: 모든 것을 알아보자 (0) | 2023.08.31 |
Kotlin에서의 꼬리 재귀와 피보나치 수열 (0) | 2023.08.29 |
Kotlin에서의 tailrec 이해하기 (0) | 2023.08.29 |