최신 JDK 21과 Kotlin 1.9.22 조합에서 발견된 오류 및 주의 사항
최신 JDK 21과 Kotlin 1.9.22 조합을 사용하면서 몇 가지 오류와 주의 사항을 발견했습니다.
- 불변 컬렉션에서 addFirst와 addLast 사용 가능
놀랍게도, 불변 컬렉션인 List에 addFirst와 addLast 메서드를 사용할 수 있습니다. 예를 들어, 다음 코드는 오류 없이 실행됩니다.
fun foo(x: List<String>) {
x.add("") // 예상대로 오류
x.addFirst("") // 허용됨
}
이는 기존 Kotlin 버전과 다른 동작이며, 명확한 문서화가 이루어지지 않아 혼란을 야기할 수 있습니다.
- null 허용 처리
null 값을 처리할 때 주의가 필요합니다. null 허용되지 않은 상황
에서 addFirst와 addLast 메서드는 null 값을 허용합니다.
val mySet = kotlin.collections.LinkedHashSet<String>()
mySet.addFirst(null) // 허용됨
mySet.addLast(null) // 허용됨
//mySet.add(null) // null can not be a value of a non-null type String
val myMap = kotlin.collections.LinkedHashMap<Int, String>()
myMap.putFirst(0, null)
myMap.putLast(1, null)
//myMap[2] = null // null can not be a value of a non-null type TypeVariable(V)
이는 jdk 21에서 신규 메소드를 kotlin 처리 과정에서 생긴 문제로 보이며, Kotlin 2.0.0 이상에서 해결될 것으로 예상됩니다.
- Kotlin 2.0.0 이상에서 확인 필요
현재 발견된 오류들은 Kotlin 1.9.22, 1.9.23 등 버전에서만 발생하는 것으로 확인되었습니다. Kotlin 2.0.0-RC 이상 버전에서는 해결될 가능성이 높으므로, 업그레이드 후 다시 확인하는 것이 좋습니다.
- 결론
JDK 21과 Kotlin 조합을 사용할 때는 위의 오류와 주의 사항을 인지하고, Kotlin 2.0.0 이상 버전으로 업그레이드를 고려하는 것이 좋습니다. 또한, Kotlin 공식 문서 및 버그 추적 시스템을 통해 최신 정보를 확인하는 것이 중요합니다.