반응형

1. JVM Annotation

(1) @JvmOverloads

  • 코틀린과 자바의 상호 운용을 위해 오버로드된 메서드를 자동으로 생성(자바의 경우 기본 인자를 지원하지 않음)
  • 생성자, 함수에 사용 가능
class Hello {
    @JvmOverloads
    fun sayHello(name: String = "Guest", age: Int = 0) {
        println("Hello, $name. You are $age years old.")
    }
}

 

(2) @JvmField

  • 코틀린의 프로러티는 getter, setter를 통해 접근을 할 수 있는데, 이를 직접 필드 접근이 가능하도록 할 때 사용
class Person {
    @JvmField
    val name: String = "홍길동"
}

 

(3) @JvmName

  • 함수, 프로퍼티, 파일 이름 등을 지정된 이름이 아닌 다른 이름으로 java에서 호출이 가능하도록 함
@file:JvmName("MathUtils")
fun add(a: Int, b: Int): Int = a + b

 

(4) @JvmStatic

  • 코틀린의 경우 companion object를 통해 static과 비슷한 효과를 내게 되는데 실제 자바에서 companion object를 접근할 때 static이 아니기 때문에 이를 해결하기 위한 어노테이션
  • 해당 어노테이션을 붙이면 java에서 static으로 사용 가능
class Hello {
    companion object {
        @JvmStatic
        fun sayHi() {
            println("Hi from Kotlin")
        }

        fun sayBye() {
            println("Bye from Kotlin")
        }
    }
}
  • Java에서 호출 시
Utils.sayHi();  // @JvmStatic의 경우
Utils.Companion.sayBye();
반응형

+ Recent posts