Kotlin에서 인라인 함수 사용
대부분의 Kotlin 프로젝트는 Kotlin 프로젝트에 문제가 될 수 있는 고차 함수를 사용합니다. 각 고차 함수는 클래스의 객체이므로 클로저가 필요합니다.
이는 고차 함수가 호출될 때마다 메모리 할당이 필요함을 의미합니다. 따라서 고차 함수를 호출할 때마다 런타임 오버헤드가 발생합니다.
Kotlin은 이 문제를 극복하기 위해 인라인
기능을 제공합니다. 이 기사에서는 Kotlin 인라인
함수의 개념과 더 나은 메모리 효율성을 위해 이를 사용할 수 있는 경우를 소개합니다.
Kotlin 인라인
기능
Kotlin inline
함수는 inline
키워드를 사용하여 선언됩니다. 함수를 선언하기 직전에 키워드를 작성해야 합니다.
Kotlin inline
함수를 사용하면 고차 함수의 메모리 효율성이 향상됩니다. 인라인
함수를 사용하면 컴파일러에 함수 코드를 호출 사이트에 복사하도록 지시하여 메모리 할당을 방지합니다.
다음은 Kotlin inline
함수의 기본 예입니다.
fun main(args: Array<String>) {
exampleFunc({ println("This function will call our inline function")})
}
inline fun exampleFunc(Func: () -> Unit ) {
Func()
print("This is an inline function call and doesn't require memory allocation")
}
출력:
인라인
기능을 사용하지 말아야 하는 경우
인라인
함수는 상위 함수를 보다 효율적으로 만드는 훌륭한 방법을 제공하지만 다음을 포함하여 사용을 지원하지 않는 일부 선언 및 시나리오가 있습니다.
- 로컬 클래스 선언
- 내부 중첩 클래스 선언
- 함수 표현
- 지역 함수 선언
- 선택적 매개변수의 기본값
인라인
기능을 사용하는 최상의 시나리오
인라인
기능은 모든 상황에서 유용한 것은 아닙니다. Kotlin 인라인
기능을 사용하는 가장 좋은 시나리오는 다음과 같습니다.
- 상위 기능에 액세스하는 동안
- 메모리 할당 효율 향상
- 함수형 매개변수를 전달할 때
- 더 나은 제어 흐름을 얻으려면
- 함수가 다른 함수를 매개변수로 받아들이는 경우
- 함수가 람다를 매개변수로 받는 경우
구체화된 유형 매개변수와 함께 Kotlin inline
함수 사용
Kotlin inline
함수를 사용하여 호출 중에 전달된 매개변수의 데이터 유형에 액세스하고 검색할 수 있습니다. reified
수식어를 사용하여 이를 수행할 수 있습니다.
fun main(args: Array<String>) {
exampleFunction<String>()
}
inline fun <reified S> exampleFunction() {
print(S::class)
}
출력:
Kotlin inline
함수에서 noinline
사용
함수 인라인
을 선언하면 모든 매개변수가 인라인
이 됩니다. 그러나 일부 매개변수만 인라인
으로 설정하려면 noinline
수정자를 사용할 수 있습니다.
noinline
수식어를 사용하는 앞에 있는 모든 표현식은 인라인되지 않습니다.
Kotlin inline
함수에서 noinline
사용을 이해하려면 이 예를 고려하십시오.
fun main(args: Array<String>){
println("Start")
inlineFuncExample({ println("This is the first expression/parameter")
return }, // This will not throw an error as it is an inline expression
{ println("This is the first expression/parameter")
return } ) // This will throw an error as it is not an inline expression
println("End")
}
inline fun inlineFuncExample( para1: () -> Unit, noinline para2: () -> Unit ) {
para1()
para2()
}
출력:
Kailash Vaviya is a freelance writer who started writing in 2019 and has never stopped since then as he fell in love with it. He has a soft corner for technology and likes to read, learn, and write about it. His content is focused on providing information to help build a brand presence and gain engagement.
LinkedIn