Kotlin

[Kotlin] @JvmField와 @JvmStatic의 차이

Nhahan 2025. 3. 20. 18:58

겉보기엔 둘 다 INSTANCE를 통하지 않고 곧바로 접근할 수 있게 해주는 것처럼 보인다.

그럼 둘 다 INSTANCE를 없애주는데 무엇이 다를까?

 

@JvmField

자바에서 필드에 직접 접근해야 할 때 사용 (단, 자바에서 null 설정이 가능하여 코틀린의 null 안정성이 깨질 수 있다)

 

@JvmStatic

자바에서 정적 메서드로 접근하고 싶을 때 사용

 


 

예시를 보면 이해가 쉽다.

object MessageBroker {
    @JvmField var maxMessagePerSecond = 0
    @JvmStatic var totalMessagesSent = 0
}

 

// @JvmField
MessageBroker.maxMessagePerSecond = 10; // 필드 직접 접근
int max = MessageBroker.maxMessagePerSecond;

// @JvmStatic
MessageBroker.setTotalMessagesSent(20); // 정적 setter 호출
int total = MessageBroker.getTotalMessagesSent(); // 정적 getter 호출