Kotlin/포스팅

코틀린 내장 애너테이션

짜집퍼박사(짜박) 2024. 1. 2. 23:53

코틀린은 몇 가지 내장 애너테이션을 제공하여 코드에 메타데이터를 추가하고 특정 동작을 지정할 수 있습니다. 여기에는 주요 내장 애너테이션 몇 가지에 대한 설명이 포함되어 있습니다.

 

1. @Deprecated

@Deprecated 애너테이션은 해당 요소가 더 이상 사용되지 않음을 나타냅니다. 사용자에게 경고 메시지를 표시하고 새로운 대체 방법을 사용하도록 권장합니다.

@Deprecated("This function is deprecated", replaceWith = ReplaceWith("newFunction()"))
fun deprecatedFunction() {
    // deprecated function implementation
}

 

2. @JvmName

@JvmName 애너테이션은 자바 바이트코드에서 생성되는 메서드나 프로퍼티의 이름을 변경할 때 사용됩니다.

@JvmName("concatenateStrings")
fun concat(str1: String, str2: String): String {
    return str1 + str2
}

 

3. @JvmStatic

@JvmStatic 애너테이션은 코틀린에서 정의된 companion object의 메서드를 자바에서 정적(static) 메서드로 사용할 수 있게 합니다.

class MyClass {
    companion object {
        @JvmStatic
        fun staticMethod() {
            // static method implementation
        }
    }
}

 

4. @JvmOverloads

@JvmOverloads 애너테이션은 디폴트 파라미터 값을 가진 코틀린 함수를 자바에서 사용할 때 모든 파라미터를 명시적으로 지정하지 않아도 되게 합니다.

@JvmOverloads
fun sum(a: Int, b: Int = 0, c: Int = 0): Int {
    return a + b + c
}

 

5. @JvmField

@JvmField 애너테이션은 코틀린 프로퍼티를 자바 필드로 노출할 때 사용됩니다.

class MyClass {
    @JvmField
    val myField = 42
}

 

6. @JvmSynthetic

@JvmSynthetic 애너테이션은 코틀린 컴파일러가 생성한 항목을 숨기고자 할 때 사용됩니다.

// MyClass.kt
class MyClass {
    private val myField = 42
    
    @JvmSynthetic
    fun getMyField(): Int {
        return myField
    }
}

// MyClass.java
public class MyClass {
    private final int myField = 42;
    
    public int getMyField() {
        return myField;
    }
}

 

7. @JvmName과 @JvmField를 함께 사용한 예

class MyKotlinClass {
    @JvmField
    val myField = 42

    companion object {
        @JvmField
        val MY_CONSTANT = 100

        @JvmStatic
        fun myStaticMethod() {
            println("Called from Java")
        }
    }
}

위의 코드에서 @JvmField를 사용하여 myField와 MY_CONSTANT를 자바에서 필드로 사용하고, @JvmStatic을 사용하여 myStaticMethod를 자바에서 정적 메서드로 사용할 수 있게 했습니다.

내장 애너테이션은 주로 자바와의 상호 운용성을 강화하고, 특정 컴파일러 옵션을 통해 자바에서도 사용할 수 있는 코드를 생성하는 데 활용됩니다.

 

With ChatGPT

'Kotlin > 포스팅' 카테고리의 다른 글

코틀린 리플렉션 API  (0) 2024.01.03
코틀린 리플렉션  (0) 2024.01.02
코틀린 애너테이션 클래스 정의  (0) 2024.01.02
코틀린 애너테이션  (0) 2024.01.02
코틀린 타입 별명  (0) 2024.01.02