코틀린 기초 문법 - 27일차 / inline 인라인, reified, type erased
- 인라인 함수는 함수 본문 코드를 호출 지점에 직접 복사하여 런타임 오버헤드를 줄이는 코틀린 기능입니다. 🚀
- 고차 함수(람다를 매개변수로 받는 함수) 사용 시 인라인은 메모리 할당 및 가상 호출로 인한 성능 저하를 크게 개선할 수 있습니다. 📈
- 일반 함수에서는 인라인의 성능 향상 효과가 미미하지만, 컬렉션 연산과 같이 반복적인 고차 함수 호출 시에는 유의미한 차이를 보입니다. ⏱️
- 인라인 함수 내 람다에서
return을 사용하면 비지역 반환(non-local return)이 발생하여 호출 함수 전체를 종료시킬 수 있으므로 주의해야 합니다. ⚠️
noinline 키워드는 인라인 함수 내 특정 람다 매개변수가 인라인되지 않고 일반 함수처럼 호출되도록 지정합니다. 🚫
crossinline 키워드는 인라인 함수 내 람다가 비지역 반환을 포함할 수 있지만, 직접 호출되지 않고 다른 함수로 전달될 때 비지역 반환을 방지하는 데 사용됩니다. ↔️
- 코틀린의 제네릭 타입 정보는 런타임에 소거(Type Erasure)되어
Any 또는 Object로 처리되므로, 런타임에 제네릭 타입 체크(is T)가 불가능합니다. 👻
reified 키워드는 inline 함수와 함께 사용되어 제네릭 타입 정보를 런타임에도 유지시켜, 런타임 타입 체크(is T, as T)를 가능하게 합니다. ✨
reified는 컴파일러가 호출 지점에서 구체적인 타입을 알 수 있을 때만 작동하며, inline 함수 내에서만 사용할 수 있습니다. 🧩
- 성능 최적화는 결국 CPU 연산과 RAM 저장 공간의 효율적인 사용에 달려 있으며, 불필요한 자원 사용은 오버헤드를 발생시킵니다. 💡
데브허브 | DEVHUB | 코틀린 기초 문법 - 27일차 / inline 인라인, reified, type erased