KOTLIN · 함수
인라인 함수 & reified
inline으로 람다 오버헤드를 제거하고, reified로 제네릭 타입 정보를 런타임에 사용합니다.
함수중급inlinereifiednoinline제네릭타입소거
핵심 설명
inline으로 람다 오버헤드를 제거하고, reified로 제네릭 타입 정보를 런타임에 사용합니다.
Kotlin code
import kotlin.reflect.KClass
// inline — 고차함수 성능 최적화
inline fun measure(block: () -> Unit): Long {
val start = System.currentTimeMillis()
block()
return System.currentTimeMillis() - start
}
// reified — 런타임 타입 정보 유지
inline fun <reified T> List<*>.filterIsInstance(): List<T> =
filter { it is T }.map { it as T }
// reified로 JSON 파싱 패턴
inline fun <reified T> parseJson(json: String): T {
// 실제로는 Gson/Moshi 사용
// T::class.java 접근 가능!
println("파싱 타입: ${T::class.simpleName}")
TODO("실제 파싱 구현")
}
// noinline — 일부 람다만 인라인 제외
inline fun doWork(
inlined: () -> Unit,
noinline notInlined: () -> Unit
) {
inlined()
val saved = notInlined // 객체로 저장 가능
saved()
}
fun main() {
val time = measure { Thread.sleep(10) }
println("${time}ms 소요")
val mixed = listOf(1, "hello", 2, "world", 3)
val strings: List<String> = mixed.filterIsInstance()
println(strings) // [hello, world]
}학습 팁
inline은 컴파일러가 함수 본문을 호출 지점에 복사합니다. 람다를 많이 호출하는 루프에서 효과적입니다.
주의할 점
inline 함수는 public API에서 internal/private 멤버에 접근하면 컴파일 경고가 납니다. @PublishedApi internal로 해결합니다.
자주 묻는 질문
인라인 함수 & reified란 무엇인가요?
inline 으로 람다 오버헤드를 제거하고, reified 로 제네릭 타입 정보를 런타임에 사용합니다.
인라인 함수 & reified 학습 시 주의할 점은 무엇인가요?
inline 함수는 public API에서 internal/private 멤버에 접근하면 컴파일 경고가 납니다. @PublishedApi internal 로 해결합니다.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.