2021년 6월 24일
코틀린은 최신 자바 기능인 동적 호출과 Java의 Lombok 및 JSpecify 지원을 추가하여 Java와의 상호 운용성을 향상시키는 데 계속 노력하고 있습니다. 또한 플랫폼 간 표준 라이브러리의 일관성을 유지하고 Gradle 도구 및 새로운 JS IR 백엔드에 투자하고 있습니다.
이 릴리스의 업데이트 내용을 개요로 제공하는 블로그 포스트입니다:
- Kotlin/JVM 개선 사항, invokedynamic를 통한 문자열 연결 및 Java의 Lombok 생성 메서드 및 JSpecify 널성 주석 호출을 실험적으로 지원합니다.
- Kotlin/Native 개선 사항, Objective-C 헤더로 KDoc 주석 내보내기를 실험적으로 지원합니다.
- Kotlin/JS IR 백엔드 마이그레이션 가이드.
- Gradle 개선 사항, Kotlin 작업의 병렬 실행을 포함합니다.
- 플랫폼 간 Char 변환 동작을 맞추기 위한 표준 라이브러리 개선 사항.
Kotlin 1.5.20으로 자동 업데이트
IntelliJ IDEA 또는 Android Studio를 사용하는 경우, IDE가 새로운 코틀린 릴리스가 사용 가능해지면 자동으로 업데이트 옵션을 제공합니다.
Kotlin 1.5.20 설치에 대한 자세한 내용은 여기에서 알아보세요.
Kotlin/JVM
최신 JVM 기능을 활용하기 위해 Kotlin은 동적 호출 (invokedynamic)의 사용을 확장했습니다. Kotlin 1.5.0에서는 SAM 어댑터의 컴파일을 기본 지원하면서 문자열 연결 및 람다 실험 기능도 유지했습니다. Kotlin 1.5.20은 문자열 연결을 동적 호출로 컴파일하는 것을 기본값으로 설정합니다.
Java의 Lombok 생성 메서드를 동일한 모듈 내에서 호출하는 실험적 지원을 위해 Kotlin 1.5.20은 다음을 지원합니다:
- 동일한 Kotlin/Java 소스에서 Java의 Lombok 생성 선언을 사용할 수 있게 해주는 실험적인 Lombok 컴파일러 플러그인입니다. Lombok 주석은 Java 소스에서만 작동하며 Kotlin 코드에서 사용하면 무시됩니다.
지원되는 주석에 @With, @Data, @Getter, @Setter, @NoArgsConstructor, @RequiredArgsConstructor 및 @AllArgsConstructor가 포함됩니다. - Java 널성 주석의 표준 통합 세트를 포함하는 JSpecify 프로젝트의 실험적 지원도 제공합니다. 이를 사용하면 Java와 상호 운용할 때 Kotlin이 널 안전성을 유지하는 데 더 자세한 널성 정보를 제공할 수 있습니다. 선언, 패키지 또는 모듈 범위의 기본 널성을 설정하고 매개 변수 널성을 지정할 수 있습니다. JSpecify 프로젝트는 활발한 개발 중인 점을 유의하십시오. 그 API 및 구현은 언제든지 크게 변경될 수 있습니다.
다음은 Kotlin이 JSpecify 주석을 처리하는 예제입니다:
// JavaClass.java
import org.jspecify.nullness.*;
@NullMarked
public class JavaClass {
public String notNullableString() { return ""; }
public @Nullable String nullableString() { return ""; }
}
// Test.kt
fun kotlinFun() = with(JavaClass()) {
notNullableString().length // OK
nullableString().length // Warning: receiver nullability mismatch
}
Kotlin/Native
Kotlin/Native 컴파일러는 이제 Kotlin 코드에서 Objective-C 프레임워크로 문서 주석 (KDoc)을 내보낼 수 있습니다. 이로써 이러한 주석은 프레임워크의 소비자에게 표시됩니다. 이 지원은 Swift에도 적용되며 실험적입니다.
또 다른 개선 사항은 배열 내에서 Array.copyInto() 작업입니다. 이제 이 경우 메모리 관리 최적화로 인해 최대 20 배 빠르게 작동합니다 (복사되는 개체 수에 따라 다릅니다).
Kotlin/JS
Kotlin 1.5.0에서는 새로운 안정적인 JVM IR 백엔드를 이미 제공했으므로 새로운 Kotlin IR 백엔드의 안정적인 JS 부분만 남았습니다. Kotlin/JS IR 백엔드를 안정화하기 위한 작업을 계속하고 있으며 귀하의 피드백이 매우 도움이 될 것입니다.
새로운 JS 백엔드로 이동하는 쉬운 방법은 새로운 마이그레이션 가이드를 따르는 것입니다. 이 가이드는 Kotlin/JS 코드를 새로운 IR 컴파일러와 작동하도록 하기 위해 필요한 변경 사항을 설명합니다. 문제가 발생하면 이슈 트래커인 YouTrack에 보고하십시오.
Gradle
Kotlin 1.5.20은 몇 가지 도구 개선 사항을 제공합니다:
- Kotlin 작업의 병렬 실행은 이제 완전히 Gradle 병렬 실행 메커니즘에 의해 제어됩니다. kotlin.parallel.tasks.in.project 속성은 더 이상 사용되지 않습니다.
- kapt에서 어노테이션 프로세서 클래스로더의 실험적 캐싱을 구현했습니다. 이것은 일부 경우에 연속적인 Gradle 실행에서 kapt를 가속화합니다.
표준 라이브러리
Kotlin 1.5.20은 모든 플랫폼에서 표준 라이브러리 Char 기능에 대해 유사한 경험을 제공합니다:
- isLowerCase()/isUpperCase()는 모든 문자를 확인하여 모든 플랫폼에서 동일한 결과를 제공합니다.
- digitToInt()는 이제 모든 플랫폼 - Kotlin/JVM, Kotlin/Native 및 Kotlin/JS - 에서 모든 Unicode 숫자 문자를 지원합니다. 이전에는 Kotlin/JVM에서만 완전한 지원을 제공했습니다.
최신 Kotlin 기능 정보를 업데이트로 계속 알아보세요! 이메일 주소를 입력하고 포스트 오른쪽에 있는 양식을 사용하여ㅋ Kotlin 업데이트를 구독할 수 있습니다.
Kotlin 1.5.20 설치 방법
IntelliJ IDEA나 Android Studio를 이미 사용 중이라면 IDE가 자동으로 Kotlin을 1.5.20으로 업데이트하도록 제안할 것입니다. 또한 다음 지침을 따라 수동으로 업데이트할 수도 있습니다.
이러한 IDE의 최신 버전을 언제든지 다운로드하여 Kotlin에 대한 포괄적인 지원을 받을 수 있습니다:
다양한 플랫폼용 Kotlin 애플리케이션 개발을 위한 IntelliJ IDEA.
Android 및 크로스 플랫폼 모바일 애플리케이션 개발을 위한 Android Studio.
또한 kotlinx 라이브러리를 호환 버전으로 업데이트하고 기존 프로젝트의 빌드 스크립트에서 Kotlin 버전 1.5.20을 지정했는지 확인하십시오.
만약 명령 줄 컴파일러가 필요하다면, Github 릴리스 페이지에서 다운로드할 수 있습니다.
문제가 발생하면 다음을 참고하십시오.
Slack에서 도움을 찾으세요 (초대장 받기).
이슈 트래커인 YouTrack에 문제를 보고하세요.
추가 정보 읽기 및 시청하기
외부 기여자들에게 감사 인사 👏👏👏
이 릴리스에 포함된 외부 기여자들에게 감사드립니다:
Alexey Stepanov, Jinseong Jeon, Tianyu Geng, Mark Punzalan, pyos, Mike Sinkovsky, Aleksey Kladov, Mads Sig Ager, Steven Schäfer, Ting-Yuan Huang, Victor Turansky, scaventz, Stefan M, Carlos Ballesteros Velasco, StefMa, Mattia Iavarone, Florian Kistner, Julius Kunze, Sergey Rubanov, Matthew Gharrity, enbandari, Campbell Jones, Br0mm, Kevin Galligan, yantimirov-timur, Ben Asher, Julia, Jared Woolston, Federico Tomassetti, Jens Klingenberg, Nicola Corti, vldf, Dominic Fischer, Martin Petrov, Renee Vandervelde, Robert Hencke, Rodrigo B. de Oliveira, Jeffrey McNally-Dawes, Scott Pierce, Sebsatian Keller, James Wald, Hyojae Kim, hungvietnguyen, Him188, Henrik Tunedal, AJ Alt, Giuseppe Barbieri, Francis Lavoie, Dico Karssiens, Dave Leeds, Thiago Henrique Hüpner, Thomas Vos, Daniel, Collin Monahan, Toshiaki Kameyama, Tristan Greeno, Vanessa Pyne, Charlie Jiang, Cedric Champeau, Boris Pristupa, Bingran, youta ogino, Aydar Mukhametzyanov, Ying Li, Zac Sweers, zadorotskas, ebukreev, kdnakt, 0xflotus, Abhishek Sudhakaran, Marcin Aman, Marcin Kraszewski, Matt Chowning, luca992, Lucas Diego, Louis CAD, Michael Blackman, Michael Hoisie, Lidonis Calhau, LanderlYoung, Kyle Kauffman, Miquel Beltran, Mohit Jayanti Gurumukhani, Muhammad Hakim Asy’ari, Márton Braun, Nekoyue, Nick Apperley, toxicbakery, KotlinIsland, Kjell Winblad, Kevin Waldock, Nils Kunze, Noah, Nwokocha wisdom maduabuchi, Paul Idstein, Keegan Witt, Jonas Seibert, Jiaming Lu
원문
https://blog.jetbrains.com/kotlin/2021/06/kotlin-1-5-20-released/
댓글