Android/Kotlin

[어노테이션]@JvmInline

네모메모 2023. 8. 14. 21:39
반응형

 

@JvmInline

  • - Kotlin에서 사용되는 애노테이션 중 하나
  • - 인라인 클래스(inline class)를 정의할 때 사용됩니다.

"인라인 클래스"

  ㄴ> 런타임 오버헤드 없이 새로운 데이터 타입을 만들어주는 Kotlin의 특징 중 하나입니다.  이 클래스는 런타임에서 실제 객체가 생성되지 않고 해당 타입의 값만 컨테이닝하는 역할을 수행합니다.

  - 주의1: 인라인 클래스의 생성자는 파라미터 하나만 받아야 합니다.

  - 주의2: 인라인 클래스는 상속을 지원하지 않습니다.

 

  • @JvmInline 애노테이션은 이러한 인라인 클래스를 JVM에서 좀 더 효율적으로 다룰 수 있도록 도와주는 역할을 합니다.
    ㄴ> @JvmInline을 사용하면 인라인 클래스의 필드에 대한 접근이 메소드 호출로 변환되지 않고, 직접 필드에 접근하는 방식으로 변경됩니다. 이로써 메소드 호출의 오버헤드를 줄이고 성능을 향상시킬 수 있습니다.

  • - Ex) @JvmInline을 사용하여 간단한 인라인 클래스를 정의하는 예제
@JvmInline
value class UserId(val value: Int)

fun main() {
    val userId = UserId(42)
    println("User ID: ${userId.value}")
}

ㄴ>  @JvmInline을 사용하면 컴파일러가 더 효율적인 코드를 생성하여 UserId 인스턴스의 value 필드에 접근할 때 메소드 호출을 사용하지 않고 직접 접근하게 됩니다. 이는 성능 개선에 도움이 되며, 불필요한 객체 생성을 피할 수 있습니다.

 

사용 예

- 코틀린의 부호없는 타입들은 인라인 클래스들로 구현됨

@SinceKotlin("1.5")
@WasExperimental(ExperimentalUnsignedTypes::class)
@JvmInline
public value class UInt @kotlin.internal.IntrinsicConstEvaluation @PublishedApi internal constructor(@PublishedApi internal val data: Int) : Comparable<UInt> {
...
반응형