reified + inline
2023. 5. 3. 16:50ㆍ개발/Kotlin
reified 키워드
- reified 키워드란…? inline과 함께 쓰이며, 런타임시 generic 타입을 알 수 있게 하는 키워드임!
fun <T> printGenerics(value: T, classType: Class<T>) {
when (classType) {
String::class.java -> {
println("String : $value")
}
Int::class.java -> {
println("Int : $value")
}
}
}
printGenerics("print generics function", String::class.java)
printGenerics(1000, Int::class.java)
원래 generic 사용하면 이렇게 타입 정보를 넘겨야하지만, 위의 키워드를 사용하면
inline fun <reified T> printGenerics(value: T) {
when (T::class) {
String::class -> {
println("String : $value")
}
Int::class -> {
println("Int : $value")
}
}
}
printGenerics1("print generics function")
printGenerics1(1000)
이렇게 타입 정보를 넘기지 않고 처리가 가능.
나아가면, 이름과 인자가 같은데 리턴 타입만 다른
inline fun<reified T> getMessage(number: Int): T {
return when (T::class) {
String::class -> "The number is : $number" as T
Int::class -> number as T
else -> "Not string, Not Integer" as T
}
}
요런 함수 구현이 가능함
인라인 함수가 필요한 이유
- 인라인 함수는 본문을 그대로 복사해서 씀…뭐 런타임시 이득이 좀 있다는듯?
- 인라인 함수를 사용해야하는 경우는
- 함수 코드가 짧고
- 람다를 인자로 받는 함수
- 일부 람다만 인라이닝 하고싶을때는
inline fun sample(inlined: () -> Unit, noinline noInlined: () -> Unit) {
}
위와 같이 noinlined 코드를 써주면 된다
'개발 > Kotlin' 카테고리의 다른 글
Kotlin operator extension (0) | 2023.07.25 |
---|---|
Kotlin flow (0) | 2023.07.25 |
Kotlin Infix func (0) | 2023.05.03 |
Retrofit to Ktor (0) | 2023.05.03 |
Kotlin value class (0) | 2023.02.16 |