Kotlin
A concise multiplatform language developed by JetBrains
새로운 JVM 백엔드, 언어, 멀티플랫폼 기능을 갖춘 1.4.30 버전 출시
Kotlin 1.4.30이 출시되었습니다. 1.4 버전 중 마지막 릴리스이며, 수많은 새로운 실험적 기능은 1.5.0에서 안정적으로 만들 계획입니다. 사용해보고 의견을 공유해 주시면 정말 감사하겠습니다. 이 모든 새로운 업데이트를 즐겁게 테스트하신 후 여러분의 생각을 알려주세요.
이번 릴리스에서 변경된 사항은 다음과 같습니다.
언어 기능 및 컴파일러
이 기능의 상세 내용을 알려드리기 위해 두 가지 주요 업데이트를 별개의 블로그 글에서 다루겠습니다.
컴파일러
새로운 JVM 백엔드가 베타에 돌입하여 이제 안정된 바이너리를 생산합니다. 즉, 프로젝트에서 JVM 백엔드를 안전하게 사용할 수 있습니다.
업데이트에 관한 자세한 내용, 새 JVM IR 백엔드를 활성화하고 안정화하는 방법은 여기에서 확인할 수 있습니다.
새로운 언어 기능 테스트 버전
Kotlin 1.5.0에서 출시 예정인 새로운 언어 기능 중에는 inline value 클래스, JVM 레코드, sealed 인터페이스가 있습니다. 이에 대한 자세한 내용은 이 글에서 읽을 수 있으며 다음은 간략한 개요입니다.
inline 클래스. inline 클래스는 이전에 별도의 언어 기능이었으나 이제 하나의 매개변수가 있는 value 클래스의 특정 JVM 최적화 요소가 되었습니다. value 클래스는 더 일반적인 개념을 나타내며 향후 다양한 최적화 요소를 지원할 것입니다. 현재는 inline 클래스를 지원하며, Project Valhalla가 사용 가능해지면 Valhalla primitive 클래스를 지원할 예정입니다.
Java 레코드. JVM 에코시스템을 위해 마련된 또 다른 개선 사항은 Java 레코드입니다. Java 레코드는 Kotlin data
클래스와 유사하며 주로 단순한 데이터 홀더로 사용됩니다. Java와의 상호운용성은 항상 Kotlin의 우선순위였으며 앞으로도 그럴 것입니다. Kotlin 코드는 새 Java 레코드를 ‘이해’하고 Kotlin 프로퍼티가 있는 클래스로 간주합니다.
sealed 인터페이스. 인터페이스는 클래스로는 물론, sealed로도 선언할 수 있습니다. sealed 제어자는 인터페이스에서 동일한 방식으로 작동합니다. sealed 인터페이스의 모든 구현은 컴파일 시 인식됩니다. sealed 인터페이스가 있는 모듈이 컴파일되면 새로운 구현이 생길 수 없습니다.
이러한 언어 기능을 사용해보고 의견을 공유해 주세요. 이러한 기능에 기대하는 것, 기능을 적용하고 싶은 사용 사례, 기능에 대한 생각이나 아이디어를 알고 싶습니다.
새로운 언어 기능에 관한 자세한 설명과 사용 방법에 관한 지침은 이 블로그 글에서 확인할 수 있습니다.
빌드 도구
Kotlin Gradle 플러그인에서 구성 캐시 지원
Kotlin 1.4.30부터 Kotlin Gradle 플러그인은 Gradle 구성 캐시와 호환됩니다. 이에 따라 빌드 프로세스의 속도가 빨라집니다. 예를 들어 Android에서 Kotlin을 사용하는 Square에는 1800개 모듈의 빌드(Android, Java, Kotlin)가 있습니다. 이 팀에서 보고한 수치는 다음과 같습니다.
- 첫 번째 빌드는 16분 30초가 걸렸습니다.
- 두 번째는 훨씬 더 짧게 5분 45초가 걸렸습니다.
더 구체적으로 설명하면, 구성 캐시 덕에 Square에서의 빌드당 구성 및 작업 그래프 생성은 1분 10초 단축되었습니다.
명령어를 실행하면 Gradle이 구성 단계를 실행하고 작업 그래프를 계산합니다. Gradle은 그 결과를 캐시하여 후속 빌드에서 재사용하므로 시간이 절약됩니다.
이 기능을 사용하려면 Gradle 명령어를 사용하거나 IntelliJ 기반 IDE를 설정하세요. 정상 작동하지 않는 항목은 YouTrack을 통해 보고해 주세요.
이 기능은 멀티플랫폼용으로는 아직 알파 단계입니다.
Kotlin/Native
컴파일 시간 개선
1.4.30에서 컴파일 시간이 개선되었습니다. KMM 네트워킹 및 데이터 스토리지 샘플 프레임워크를 다시 빌드하는 데 걸리는 시간이 9.5초(1.4.10)에서 4.5초(1.4.30)로 단축되었습니다.
컴파일러 최적화는 계속될 예정이며 YouTrack에서 이 이슈를 팔로우할 수 있습니다.
64비트 watchOS 시뮬레이터 지원
Apple Watch 시뮬레이터용 Kotlin 앱 빌드는 2018년 10월 1.3.60 Kotlin 릴리스부터 지원되었습니다. 그런데 지난 11월 Apple Watch 시뮬레이터 아키텍처가 i386에서 x86_64로 변경되면서 이 기능을 작업하는 개발자에게 문제가 생겼습니다. 새로운 Kotlin/Native watchosX64
대상은 64비트 아키텍처에서 watchOS 시뮬레이터를 실행하는 데 사용할 수 있으며 WatchOS 7.0 버전 이상에서 작동합니다.
Xcode 12.2 SDK 지원
이제 Kotlin/Native에서 Xcode 12.2를 지원합니다. Xcode 12.2 릴리스에 추가된 macOS 프레임워크를 이번 Kotlin 업데이트로 사용할 수 있게 되었습니다. 예를 들어, macOS용 애플리케이션을 개발하는 사용자는 MLCompute 프레임워크를 사용할 수 있습니다.
Kotlin/JS
최상위 프로퍼티에 대한 초기화 지연 프로토타이핑
최상위 프로퍼티에 대한 초기화 지연 기능은 실험적으로 제공됩니다. 자세한 내용은 새로운 기능에서 확인할 수 있습니다.
표준 라이브러리
대/소문자 텍스트에 대해 로케일에 구애받지 않는 API
이번 릴리스에는 문자열 및 문자의 대/소문자를 변경하는 용도의 로케일에 구애받지 않는 실험적 API가 도입되었습니다. 현재 toLowerCase()
, toUpperCase()
, capitalize()
, decapitalize()
API 함수는 로케일에 영향을 받아 불명확하거나 불편한 경우가 있습니다. 서로 다른 플랫폼 로케일 설정의 경우 이는 코드 동작에 영향을 미칩니다. 예를 들어 터키어 로케일에서 toUpperCase
를 사용해 문자열 “kotlin”을 변환하면 “KOTLIN”이 아니라 “KOTLİN”이 됩니다. 그러나 이제 루트 로케일을 사용하므로 예상대로 작동합니다.
텍스트 처리 함수의 전체 변경 목록은 KEEP에서 확인할 수 있습니다. 이 API는 실험적이므로 YouTrack에서 의견을 공유해 주세요.
Char 변환을 위한 명확한 API
Char를 숫자로 바꾸는 현재 변환 함수는 다양한 숫자 유형으로 표현된 UTF-16 코드를 반환하므로 문자열의 숫자 값을 반환하는 유사한 String-to-Int 변환과 혼동되는 경우가 많습니다.
이러한 혼동을 피하기 위해 Char 변환을 Char
의 정수 코드를 가져오고 Char
를 생성하는 함수와 Char
를 그에 해당하는 숫자 값으로 변환하는 함수라는 두 가지 명확하게 명명된 함수 세트로 분리하기로 결정했습니다.
이 기능도 실험적이지만 1.5.0 릴리스에서 안정화할 계획입니다. 자세한 내용은 KEEP에서 확인하세요.
1.4.30의 전체 업데이트에 관한 자세한 내용은 새로운 기능, 새로운 JVM 백엔드, 언어 기능을 소개한 블로그 글에서 확인하세요.
업데이트 방법
IntelliJ IDEA에서 Kotlin 플러그인을 1.4.30으로 자동 업데이트할 것을 제안할 것이나, 이 지침을 따라 직접 업데이트할 수도 있습니다. Android Studio Arctic Fox용 Kotlin 플러그인은 추후에 출시될 예정입니다.
이전 Kotlin 버전으로 생성한 기존 프로젝트에서 작업하려면 해당 프로젝트 구성에서 1.4.30 Kotlin 버전을 사용하세요. 자세한 내용은 Gradle 및 Maven에 대한 문서를 참조하세요.
명령줄 컴파일러는 GitHub 릴리스 페이지에서 다운로드할 수 있습니다.
릴리스에 관한 세부 정보 및 호환되는 라이브러리 목록은 여기에 나와 있습니다.
새 릴리스에서 이슈가 발생한 경우 언제든지 Slack(여기에서 초대 받기)에서 도움을 요청하거나 YouTrack에 이슈를 보고해 주세요.
프로젝트를 최신 버전의 Kotlin으로 업데이트하기 전에 play.kotl.in에서 온라인으로 새로운 언어 및 표준 라이브러리 기능을 사용해 볼 수 있습니다.
외부 기여자
이 릴리스에 포함된 풀 리퀘스트를 제공해 주신 모든 외부 기여자께 감사의 마음을 전합니다.
Jinseong Jeon
Toshiaki Kameyama
pyos
Mads Ager
Steven Schäfer
Mark Punzalan
Ivan Gavrilovic
Kristoffer Andersen
Bingran
Juan Chen
zhelenskiy
Kris
Hung Nguyen
Victor Turansky
AJ
Louis CAD
Kevin Bierhoff
Hollow Man
Francesco Vasco
Uzi Landsmann
Dominik Wuttke
Derek Bodin
Ciaran Treanor
rbares
Martin Petrov
Yuya Urano
KotlinIsland
Jiaxiang Chen
Jake Wharton
Sam Wang
MikeKulasinski-visa
Matthew Gharrity
Mikhail Likholetov
이 게시물은 Alina Grebenkina가 작성한 1.4.30 Is Released With a New JVM Backend and Language and Multiplatform Features를 번역한 글입니다.