Glacier's Daily Log

@JvmField 어노테이션으로 Java+Kotlin 환경에 대응하기 본문

Coding/Android

@JvmField 어노테이션으로 Java+Kotlin 환경에 대응하기

h__glacier_ 2024. 3. 29. 17:13
반응형

 ℹ️ 배경

회사에서 개발 중 기능의 공통화를 위해서 여러 클래스의 상위 클래스를 제작하였다.
작업 중 상위카드인 ~~~~~.kt에 선언된 var root: SomeDto? = null 를 상속받은 클래스에서 사용할 일이 생겼다.

 

☢️ 이슈

코틀린에서는 간단하게 직접 변수명으로 접근할 수 있지만, Kotlin으로 선언된 클래스를 상속받은 Java 코드에서는 Setter/Getter를 통해서 접근할 수 밖에 없는 문제가 생겼다.
따라서 기존에 root로 접근하던 수많은 코드를 모두 getRoot()로 변경해주어야 하는 상황이 발생했다.

 

✅ 해결 @JvmField

Instructs the Kotlin compiler not to generate getters/setters for this property and expose it as a field.
즉 코틀린 컴파일러가 getter/setter를 자동으로 생성하지 못하게 하고, 직접 필드를 노출시켜 접근할 수 있도록 만들어주는 어노테이션이 제공되고 있었다.

@JvmField
var root: SomeDto? = null
로 문제를 해결할 수 있었다.


Java + Kotlin 환경에서 개발할 때는 JVM 어노테이션에 대해서 공부하고 잘 활용하면 유용할 것 같다.

반응형
Comments