분류 전체보기277 [Kotlin] @JvmField와 @JvmStatic의 차이 겉보기엔 둘 다 INSTANCE를 통하지 않고 곧바로 접근할 수 있게 해주는 것처럼 보인다.그럼 둘 다 INSTANCE를 없애주는데 무엇이 다를까? @JvmField자바에서 필드에 직접 접근해야 할 때 사용 (단, 자바에서 null 설정이 가능하여 코틀린의 null 안정성이 깨질 수 있다) @JvmStatic자바에서 정적 메서드로 접근하고 싶을 때 사용 예시를 보면 이해가 쉽다.object MessageBroker { @JvmField var maxMessagePerSecond = 0 @JvmStatic var totalMessagesSent = 0} // @JvmFieldMessageBroker.maxMessagePerSecond = 10; // 필드 직접 접근int max = Messag.. 2025. 3. 20. [Kotlin] @JvmStatic @JvmStatic함수와 프로퍼티에 static 하게 접근할 수 있도록 추가적인 메서드 또는 getter / setter 를 생성한다. object Utils { fun printAll(list: List) { println(list) } val version = "v0.0.1"}이 object의 함수와 프로퍼티는 kotlin에서는 직접적으로 접근할 수 있다.fun main() { Utils.printAll(listOf("a", "b", "c")) println(Utils.version)} 그러나 Java에서는 해당 object의 메서드/변수에 직접적으로 접근할 수 없고, INSTANCE를 통해 접근 가능하다.public static void main(String[.. 2025. 3. 20. [Kotlin] @JvmField @JvmField코틀린 컴파일러가 getter / setter 를 자동으로 생성하지 못하도록 막고, 필드를 곧바로 접근하게끔 한다. class Corporation( val name: String, @JvmField val location: String)는 아래와 같이 자바로 컴파일 된다.public static void main(String[] args) { Corporation company = new Corporation("회사명", "강남구"); String name = company.getName(); // getter 접근 String location = company.location; // 필드에 직접 접근} 혹은, 싱글턴 객체(object declaration, .. 2025. 3. 20. [Kotlin] @JvmOverloads @JvmOverloadsdefault parameter가 있는 함수를 자바에서 호출할 수 있도록 여러 오버로드를 생성한다. (자바는 기본값을 지원하지 않으므로 자바에서 defulat parameter가 있는 코틀린의 함수를 사용하려면 필수적) @JvmOverloadsfun findMessages(sender: String, type: String = "text", maxResults: Int = 10) {}원하는 함수 위에 @JvmOverloads를 선언만 해두면,public static void findMessages(String sender, String type, int maxResults) {}public static void findMessages(String sender, String type.. 2025. 3. 20. [Kotlin] @JvmName @JvmName코틀린 선언의 자바 이름을 지정한다. 이름 충돌 해결에 유용.// PrintUtils.kt@file:JvmName("Utils") // PrintUtils.kt -> Utils 로 이름 변경해서 호출하도록 명시@JvmName(name = "printAllInts")fun printAll(list: List) { println(list)}@JvmName(name = "printAllStrings")fun printAll(list: List) { println(list)}는 자바에서public static void main(String[] args) { // PrintUtilsKt 대신 Utils 로 접근 Utils.printAllInts(Arrays.asList(1,.. 2025. 3. 20. 이전 1 ··· 8 9 10 11 12 13 14 ··· 56 다음