본문 바로가기
Kotlin/Release Notes

[Kotlin Release Notes] Kotlin 1.5.30 Is Now Available!

by 노력남자 2023. 9. 12.
반응형

2021년 8월 25일

 

Kotlin 1.5.30은 Kotlin 1.6.0을 출시하기 전의 마지막 점진적 릴리스이므로 Kotlin 1.6.0에서 출시할 예정인 많은 실험적 언어 및 표준 라이브러리 기능을 포함하고 있습니다. 이러한 실험적 기능을 시도하고 피드백을 공유하십시오. 여러분의 피드백은 최종 결과에 큰 영향을 미칠 수 있습니다! 이러한 실험적 기능은 sealed when 문, opt-in 요구 사항 변경, 어노테이션 클래스의 인스턴스화, Duration 및 Regex stdlib API 개선 등이 포함됩니다.

또한 Kotlin 1.5.30에서는 Apple silicon에 대한 네이티브 지원, Kotlin/JS IR 백엔드를 베타로 승격, 멀티플랫폼 애플리케이션의 공유 네이티브 코드에 사용자 지정 cinterop 라이브러리 사용 가능, Kotlin Gradle 플러그인에서 제공하는 Java 도구 체인 지원 등 다양한 개선 사항을 즐길 수 있습니다.

Kotlin 1.5.30으로 업데이트하면 다음과 같은 개선 사항을 포함한 이 릴리스의 개요를 제공합니다:

  • 언어 개선 사항: sealed when 문, suspend 함수를 상위 유형으로 지원 및 opt-in 요구 사항 변경 등.
  • 멀티플랫폼 개선 사항: 공유 네이티브 코드에서 사용자 지정 cinterop 라이브러리 사용 및 출력 형식으로 XCFrameworks 지원 등.
  • Kotlin/JVM 개선 사항: 어노테이션 클래스의 인스턴스화 및 nullability 어노테이션 지원의 개선된 구성 등.
  • Kotlin/Native 개선 사항: Apple silicon에 대한 네이티브 지원 및 CocoaPods Gradle 플러그인을 위한 개선된 Kotlin DSL 등.
  • Kotlin/JS IR 개선 사항: JS IR 백엔드의 베타 승격 및 새로운 백엔드에 대한 더 나은 디버깅 경험 등.
  • Gradle 개선 사항: Java 도구 체인 지원 및 Kotlin 데몬의 JVM 인수를 명시적으로 설정하는 더 쉬운 방법 등.
  • Duration 및 Regex API에 대한 표준 라이브러리 개선 사항.

 


Kotlin 1.5.30 자동 업데이트


IntelliJ IDEA 또는 Android Studio를 사용하는 경우, Kotlin의 새로운 릴리스가 사용 가능하자마자 자동으로 업데이트할 수 있는 옵션이 있습니다.

Kotlin 1.5.30 설치에 대한 자세한 내용은 여기에서 알아보십시오.

참고: IntelliJ IDEA의 최신 버전인 2021.2는 Kotlin 1.5.30을 지원하지 않습니다. 이미 업그레이드한 경우 JetBrains Toolbox 앱을 사용하여 IntelliJ IDEA 2021.1을 쉽게 설치하고 해당 버전에서 Kotlin 1.5.30을 사용하거나, Kotlin 1.5.31 버그 수정 릴리스를 기다릴 수 있습니다.


언어


Kotlin 로드맵에는 sealed when 문 지원, opt-in 어노테이션 출시, 유추 유형 개선 및 빌더 유추 안정화가 포함되어 있습니다.

Kotlin 1.5.30은 이러한 기능을 미리보기로 제공하여 1.6.0에서의 출시가 계획된 기능의 미리보기입니다.


Sealed when 문


Sealed when은 YouTrack에서 280개 이상의 투표를 받은 기다려진 기능입니다. 1.5.30에서 이 기능을 활성화하면 Kotlin 컴파일러가 when 문 중 하나가 완전하지 않을 경우 경고를 표시합니다. 이로써 여러분은 자체 함수를 도입하지 않고도 코드를 더 안전하게 만들 수 있습니다.

이 기능을 시도하고 여기 YouTrack 티켓에서 피드백을 제공하십시오.


슈퍼타입으로서의 suspend 함수 지원


Kotlin 1.5.30은 suspend 함수 유형을 슈퍼 인터페이스로 사용할 수 있는 능력의 미리보기를 제공하지만 일부 제한이 있습니다. 이것은 Kotlin 코루틴 디자인에서 빠진 부분 중 하나입니다.

 

class MyClass: suspend () -> Unit {
    override suspend fun invoke() { TODO() }
}


이 기능을 활성화하고 시도하고 여기 YouTrack 티켓에서 피드백을 제공하십시오.


opt-in 요구 사항 변경


opt-in 어노테이션 출시로 가는 더 나은 단계로서 Kotlin 1.5.30은 다음과 같은 변경 사항을 제공합니다:

다른 대상에 대한 opt-in 요구 사항 어노테이션의 사용 및 선언을 위한 새로운 규칙 제시합니다.
실험적 API의 암시적 사용에 대해서도 opt-in을 필요로 합니다. 예를 들어 함수의 반환 유형이 실험적 API 요소로 표시되어 있으면 선언이 명시적으로 opt-in을 요구하지 않더라도 함수의 사용은 opt-in이 필요합니다.

 

// 라이브러리 코드

@RequiresOptIn(message = "This API is experimental.")
@Retention(AnnotationRetention.BINARY)
@Target(AnnotationTarget.CLASS)
annotation class MyDateTime // Opt-in 요구 사항 어노테이션

@MyDateTime
class DateProvider // opt-in을 필요로 하는 클래스

// 클라이언트 코드

// 경고: 실험적 API 사용
fun createDateSource(): DateProvider { /* ... */ }

fun getDate(): Date {
    val dateSource = createDateSource() // 또한 경고: 실험적 API 사용
    // ... 
}


변경 사항을 시도하고 여기 YouTrack 티켓에서 피드백을 공유하십시오.

opt-in 요구 사항에 대해 자세히 알아보십시오.


재귀 제네릭 유형에 대한 유추 개선 사항


재귀 제네릭 유형에 대한 유추 기능을 활성화하면 Kotlin 1.5.30 컴파일러는 해당 유형 매개변수의 상한만을 기반으로 유형 인수를 유추할 수 있습니다. 이렇게 하면 빌더 API를 만드는 데 자주 사용되는 Java에서 사용되는 재귀 제네릭 유형의 다양한 패턴을 생성할 수 있게 됩니다.

 

// Kotlin 1.5.20
val containerA = PostgreSQLContainer<Nothing>(DockerImageName.parse("postgres:13-alpine")).apply {
    withDatabaseName("db")
    withUsername("user")
    withPassword("password")
    withInitScript("sql/schema.sql")
}

// Kotlin 1.5.30
val containerB = PostgreSQLContainer(DockerImageName.parse("postgres:13-alpine"))
    .withDatabaseName("db")
    .withUsername("user")
    .withPassword("password")
    .withInitScript("sql/schema.sql")


빌더 유추 제한 제거


빌더 유추 제한을 제거하면 Kotlin 1.5.30에서 빌더 유추 제한을 제거합니다. 빌더 유추가 추론할 수 있는 유형 정보를 지정할 뿐만 아니라 get 함수를 사용할 수도 있습니다. 예를 들어 명시적으로 유형 인수를 지정하지 않고도 buildList()의 람다 인수 내에서 get()을 호출할 수 있습니다.

 

Kotlin 멀티플랫폼


Kotlin 1.5.30은 Kotlin 멀티플랫폼에 대한 다음과 같은 개선 사항을 포함합니다:

  • 공유 네이티브 코드에서 사용자 지정 cinterop 라이브러리를 사용할 수 있는 능력, 이것은 Kotlin/Native와 함께 제공되는 플랫폼 종속 라이브러리를 공유하는 능력을 확장합니다.
  • 모든 Kotlin 멀티플랫폼 프로젝트의 출력 형식으로 XCFrameworks를 지원합니다. XCFrameworks는 모든 대상 플랫폼 및 아키텍처의 논리를 단일 번들에 모아줍니다. 또한 애플리케이션을 AppStore에 게시하기 전에 불필요한 아키텍처를 제거할 필요가 없습니다.
  • Android 아티팩트에 대한 새로운 기본 게시 설정. 이 설정은 기본적으로 모든 빌드 유형 (예: 디버그 또는 릴리스)과 호환됩니다. 이전에는 1.5.30 이전에 멀티플랫폼 라이브러리를 Android에 게시할 때 maven-publish Gradle 플러그인이 각 게시된 Android 변형에 대한 빌드 유형 속성을 포함하도록 생성된 메타데이터가 포함되어 있었습니다. 이로 인해 라이브러리 사용자가 사용하는 빌드 유형과만 호환되었습니다.


Kotlin/JVM


Kotlin 1.5.30에서 Kotlin/JVM에 다음과 같은 업데이트가 있습니다:

  • 개선된 nullability 어노테이션 지원 구성. 특정 유형의 nullability 어노테이션 정보를 기반으로 컴파일러가 nullability 불일치를 보고하는지 여부를 지정할 수 있습니다. 지원되는 nullability 어노테이션의 전체 목록을 확인하고 RxJava3 어노테이션으로 확장된 목록도 확인할 수 있습니다.
  • 어노테이션 클래스의 인스턴스화. 이 기능을 활성화하면 임의의 코드에서 어노테이션 클래스의 생성자를 호출하여 결과 인스턴스를 얻을 수 있습니다. 이 기능은 어노테이션 인터페이스의 구현을 가능하게 하는 Java 규칙과 동일한 사용 사례를 다룹니다.

 

annotation class InfoMarker(val info: String)

fun processInfo(marker: InfoMarker) = ...

fun main(args: Array<String>) {
    if (args.size != 0)
        processInfo(getAnnotationReflective(args))
    else
        processInfo(InfoMarker("default"))
}


Kotlin/Native


Kotlin 1.5.30은 Kotlin/Native에 다음과 같은 개선 사항을 제공합니다:

  • Apple silicon에 대한 네이티브 지원. 이제 Apple silicon 하드웨어에서 Intel 기반 Mac에서 지원되는 모든 대상에 대한 애플리케이션을 빌드할 수 있으며 Rosetta 번역 환경을 사용할 필요가 없습니다. 1.5.30에서 소개된 새로운 대상인 macosArm64, iosSimulatorArm64, watchosSimulatorArm64 및 tvosSimulatorArm64를 사용하여 Apple silicon에서 Kotlin 코드를 네이티브로 실행할 수 있습니다.
  • CocoaPods Gradle 플러그인에 대한 개선된 Kotlin DSL. Kotlin 1.5.30은 CocoaPods 구성을 개선하여 Apple 대상에 대한 프레임워크 정의와 동일한 새로운 DSL 형식을 제공합니다. 이를 사용하여 정적 또는 동적 유형 여부를 정의하고 종속성의 명시적 익스포트 및 Bitcode 포함을 활성화하고 다른 옵션을 구성할 수 있습니다.
  • Swift 5.5 async/await와의 실험적 상호 운용성. Swift 5.5 상호 운용성의 현재 상태에 대해 자세히 알아보고 이 YouTrack 이슈에서 의견을 남기십시오.
  • MinGW (Windows)를 위한 import 라이브러리 없는 DLL에 대한 링킹 폐지. 이 폐지는 성능 및 기타 개선 사항을 가진 LLD 링커로 전환한 결과입니다. LLD 링커로의 전환에 대한 생각과 우려를 이 YouTrack 이슈에서 공유해 주시기 바랍니다.
  • 객체 및 동반 객체에 대한 Swift/Objective-C 매핑 개선. 이제 네이티브 iOS 개발자에게 더 직관적인 방식으로 객체 및 동반 객체에 접근할 수 있습니다 - .shared 및 .companion 속성을 사용하여.


Kotlin/JS


Kotlin 1.5.30은 Kotlin/JS에 다음과 같은 개선 사항을 제공합니다:

  • JS IR 컴파일러 백엔드가 베타로 진입합니다. 새로운 백엔드로의 마이그레이션을 간편하게 만들기 위해 마이그레이션 가이드와 새로운 Kotlin/JS Inspection Pack IDE 플러그인을 사용할 수 있습니다. 이 플러그인은 IntelliJ IDEA에서 직접 필요한 변경 사항을 만드는 과정을 안내해 줍니다.
  • Kotlin/JS IR 백엔드를 사용하는 애플리케이션의 디버깅 경험이 향상되었습니다. 이제 JavaScript 소스 맵 생성을 통해 브레이크 포인트, 단계별 실행 및 올바른 소스 참조를 갖춘 가독성 있는 스택 추적을 지원하여 어떤 JavaScript 디버거에서도 이점을 얻을 수 있습니다. Kotlin/JS 애플리케이션을 디버깅하는 방법에 대해 더 자세히 알아보세요.

Gradle

 

Kotlin 1.5.30에서는 Kotlin Gradle 플러그인 사용자 경험을 개선하기 위한 다음 기능을 제공합니다:

  • Java 도구 체인 지원: Gradle 6.7에서 도입된 Java 도구 체인 지원을 Kotlin Gradle 플러그인에서도 사용할 수 있습니다. 이를 통해 프로젝트 컴파일에 필요한 JDK를 선택하기가 더 쉬워집니다. 빌드 스크립트에서 필요한 버전을 선언하면 Gradle이 나머지를 처리하며 호스트 머신에서 찾거나 아직 설치되지 않았다면 다운로드 및 설치까지 수행합니다. Kotlin Gradle 플러그인은 Kotlin/JVM 컴파일 작업을 위한 Java 도구 체인을 지원합니다. Gradle 버전 6.1-6.6의 경우 UsesKotlinJavaToolchain 인터페이스를 사용하여 JDK 홈을 설정합니다.
  • Kotlin 데몬 JVM 인수를 명시적으로 지정하는 간편한 방법: Kotlin 데몬에 대해 아무것도 지정되지 않으면 Gradle 데몬에서 인수를 상속합니다. 이제 build.gradle.kts 또는 gradle.properties에서 한 줄로 특정 작업 및 Kotlin 확장을 위한 인수를 지정할 수 있습니다.

 

// build.gradle.kts
kotlin {
    kotlinDaemonJvmArgs = listOf("-Xmx486m", "-Xms256m", "-XX:+UseParallelGC")
}

// gradle.properties
kotlin.daemon.jvmargs = -Xmx486m -Xms256m -XX:+UseParallelGC


표준 라이브러리


Kotlin 1.5.30은 표준 라이브러리의 Duration 및 Regex API에 개선 사항을 제공합니다:


Duration API 개선

 

Kotlin 1.6.0에서 Duration API를 안정화할 예정이므로 이를 시도하고 변경을 원하는 내용에 대한 피드백을 공유할 마지막 기회입니다. Duration.toString()의 출력이 더 읽기 쉽게 개선되었습니다. 예를 들어, Duration.minutes(920).toString()은 이제 이전의 920m 대신 15h 20m을 생성합니다.

음수 지속 시간은 이제 마이너스 기호 (-)로 접두사가 붙으며 여러 구성 요소로 구성된 경우 괄호로 둘러싸입니다: -12m 및 -(1h 30m).

이 릴리스는 또한 문자열에서 Duration을 구문 분석하기 위한 새로운 함수의 미리보기를 제공합니다.

 

val isoFormatString = "PT1H30M"
val defaultFormatString = "1h 30m"
println(Duration.parse(isoFormatString)) // "1h 30m"
println(Duration.parse(defaultFormatString)) // "1h 30m"


Regex API 개선

 

 Kotlin 1.5.30은 정규 표현식을 위한 새로운 실험적 함수를 제공합니다.

- matchesAt(): 문자열의 지정된 위치에서 정규식이 일치하는지 확인합니다.
- matchAt(): 일치하는 경우 일치 항목을 반환합니다.

 

val releaseText = "Kotlin 1.5.30 is released!"
val versionRegex = "\\d[.]\\d[.]\\d+".toRegex()
println(versionRegex.matchAt(releaseText, 0)) // "null"
println(versionRegex.matchAt(releaseText, 7)?.value) // "1.5.30"


- splitToSequence(): split()의 지연 버전으로 지정된 정규식 주위에서 문자열을 분할하지만 결과를 Sequence로 반환합니다. CharSequence에도 유사한 함수가 추가되었습니다.

 

val colorsText = "green, red , brown&blue, orange, pink&green"
val regex = "[,\\s]+".toRegex()
val mixedColor = regex.splitToSequence(colorsText)
    .onEach { println(it) }
    .firstOrNull { it.contains('&') }
println(mixedColor) // "brown&blue"


Kotlin 1.5.30 설치 방법


IntelliJ IDEA나 Android Studio를 이미 사용 중이라면 IDE에서 Kotlin을 자동으로 1.5.30으로 업데이트하라는 제안이 표시됩니다. 수동으로 업데이트하려면 다음 지침을 따릅니다.

Kotlin의 포괄적인 지원을 받기 위해 이 IDE들의 최신 버전을 다운로드할 수 있습니다:

  • IntelliJ IDEA: 다양한 플랫폼용 Kotlin 애플리케이션을 개발하기 위해 사용됩니다.
  • Android Studio: Android 및 크로스 플랫폼 모바일 애플리케이션 개발을 위해 사용됩니다.

 

또한 이미 존재하는 프로젝트의 빌드 스크립트에서 Kotlin 버전을 1.5.30으로 지정하고 kotlinx 라이브러리를 호환 버전으로 업데이트했는지 확인하세요.

명령 줄 컴파일러가 필요한 경우 GitHub 릴리스 페이지에서 다운로드할 수 있습니다.


문제가 발생하면 다음 방법을 사용할 수 있습니다.

 

  • Slack에서 도움을 찾기: Slack에서 초대를 받아 도움을 청하세요.
  • 이슈 트래커에 문제 보고: YouTrack 이슈 트래커에 문제를 보고하세요.
  • 최신 Kotlin 기능 정보를 최신 상태로 유지하세요! Kotlin 업데이트를 받으려면 이 게시물의 오른쪽에 있는 양식을 작성하여 Kotlin 업데이트를 구독하세요.

추가 정보와 자료를 읽고 시청하려면 다음을 참조하세요

 

  • Kotlin 1.5.30에 대한 비디오: Kotlin 1.5.30에서 무엇이 새로운지에 대한 비디오
  • Kotlin 1.5.30 문서: Kotlin 1.5.30의 새로운 기능에 대한 문서
  • Kotlin 1.5.20 블로그 글: Kotlin 1.5.20에 대한 블로그 글
  • Kotlin 1.5.0 블로그 글: Kotlin 1.5.0에 대한 블로그 글
  • Kotlin 로드맵: Kotlin의 발전 로드맵에 대한 정보

 

외부 기여자 👏👏👏

 

저희는 이번 릴리스에 포함된 모든 외부 기여자분들께 감사의 인사를 전합니다. 이러한 외부 기여자들의 풀 리퀘스트가 Kotlin의 발전에 큰 기여를 했습니다. 아래는 이번 릴리스에 기여한 외부 기여자들의 목록입니다:

 

Jinseong Jeon, pyos, Tianyu Geng, Mark Punzalan, Mads Ager, Ivan Gavrilovic, Steven Schäfer, Vladimir Ivanov, Hung Nguyen, Matthew Gharrity, Jiaxiang Chen, Ivan Kochurkin, Iaroslav Postovalov, Toshiaki Kameyama, Udi Cohen, Xin Wang, bracadabra

 

원문

 

https://blog.jetbrains.com/kotlin/2021/08/kotlin-1-5-30-released/

반응형

댓글