본문 바로가기
Kotlin/Release Notes

[Kotlin Release Notes] Kotlin 1.7.0-Beta Released

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

2022년 5월 4일

 
Kotlin 1.7.0-Beta의 첫 번째 미리보기가 출시되었습니다! 이 미리보기에서 주요 내용은 다음과 같습니다:

  • 빌더 추론에 대한 변경 사항.
  • min() 및 max() 컬렉션 함수의 복귀.
  • 확실히 non-nullable 타입의 안정화.
  • 새로운 Kotlin/Native 메모리 매니저에 대한 업데이트.

 
이러한 기능을 시도하고 Kotlin 1.7.0을 개선하기 위해 발견한 문제를 보고하려면 Kotlin 1.7.0-Beta를 설치하십시오.

향후 게시물에서 다른 흥미로운 기능에 대해 알려드릴 것입니다. 계속 주시하세요!

1.7.0부터 "마일스톤"이라는 용어를 "베타"로 변경하여 케이던스 용어를 업데이트하고 있습니다. 이 결정에는 몇 가지 이유가 있습니다:

  • Kotlin 빌드 용어를 소프트웨어 릴리스 주기의 표준 용어와 더 일치하게 하려고 합니다. 구체적으로 말하면 "베타"는 해당 버전에 새로운 기능을 더하지 않고 안정화 작업 중임을 의미합니다. 최종 변경 사항은 구현되며, 여러분의 피드백을 바탕으로 변경 사항이 이루어질 것입니다.
  • 얼마 전까지 M-릴리스 컴파일러는 "프리 릴리스" 코드를 생성했으며, 이로 인해 이러한 버전을 테스트하기 어려웠습니다. 이제 이것은 더 이상 사실이 아닙니다. Kotlin 베타 버전을 시험해보는 것이 간단한 프로세스이며 Kotlin 팀에서 매우 권장합니다.
  • 마지막으로, "베타"라는 용어 자체가 커뮤니티로부터의 피드백을 요청하는 것입니다. 이를 통해 여러분이 피드백을 공유하길 원한다는 것을 알려드립니다.

 
Kotlin 1.7.0-Beta를 평가하고 피드백을 YouTrack 및 Slack(새 Slack 회원을 위한 초대를 신청하세요)을 통해 공유해 주시기 바랍니다.
 

빌더 추론 변경 사항


빌더 추론은 일반적인 빌더 함수를 호출할 때 유용한 특수 종류의 타입 추론입니다. 이는 람다 인자 내부의 다른 호출에 대한 타입 정보를 사용하여 호출의 타입 인자를 컴파일러가 추론하는 데 도움을 줍니다.

Kotlin 1.7.0-Beta에는 빌더 추론에 대한 추가 변경 사항이 포함되어 있습니다. 이로써 빌더 추론 안정화에 한 걸음 더 가까워지고 로드맵 항목 중 하나를 완료하는 데 도움이 됩니다.

이 릴리스에서는 -Xenable-builder-inference 컴파일러 옵션을 명시하지 않고도 일반적인 타입 추론으로 충분한 타입 정보를 얻을 수 없는 경우 빌더 추론이 자동으로 활성화됩니다. 이 옵션은 1.6.0 버전에서 소개되었습니다.

이것은 이제 추가적인 어노테이션 또는 옵션을 적용하지 않고도 빌더 타입 추론을 사용하는 사용자 정의 빌더를 작성할 수 있다는 의미입니다. 사용자 정의 제네릭 빌더를 작성하는 방법을 알아보세요.


min() 및 max() 컬렉션 함수의 복귀


Kotlin 1.4에서는 min() 및 max() 컬렉션 함수의 이름을 minOrNull() 및 maxOrNull()로 변경했습니다. 이 새로운 이름은 그들의 동작을 더 잘 반영하며, 수신 컬렉션이 비어 있으면 null을 반환합니다. 또한 Kotlin 컬렉션 API 전반에 사용되는 네이밍 규칙과 함수 동작을 일치시키는 데 도움이 되었습니다.

minBy(), maxBy(), minWith() 및 maxWith()도 Kotlin 1.4에서 *OrNull() 동의어를 얻었으며, 이 변경에 영향을 받는 이전 함수들은 점진적으로 사용 중단되었습니다.

Kotlin 1.7.0-Beta에서는 원래 함수 이름을 사용하되, null이 아닌 반환 타입과 함께 돌아옵니다. 갱신된 min(), max(), minBy(), maxBy(), minWith() 및 maxWith()는 이제 엄격하게 컬렉션 요소를 반환하거나 예외를 throw합니다.
 

fun main() {
    val numbers = listOf<Int>()
    println(numbers.maxOrNull()) // "null"
    println(numbers.max()) // "Exception in… Collection is empty."
}


자세한 내용은 이 YouTrack 이슈를 참조하세요.
 

확실히 non-nullable 타입의 안정화


Kotlin 1.7.0에서는 Kotlin 1.6.20에서 소개된 확실히 non-nullable 타입을 안정적으로 제공합니다.

이러한 타입은 일반적인 Java 클래스와 인터페이스를 확장할 때 더 나은 상호 운용성을 제공하기 위해 추가되었습니다.

Kotlin 1.6.20부터는 사용 사이트에서 새로운 구문 T & Any를 사용하여 일반적인 타입 매개변수를 확실히 non-nullable로 표시할 수 있었습니다. 이 구문 형식은 교차 타입 표기법의 표기에서 비롯되었으며 이제 &의 왼쪽에는 nullable 상한 타입이 있는 타입 매개변수로 제한되며 &의 오른쪽에는 non-nullable Any입니다:
 

fun <T> elvisLike(x: T, y: T & Any): T & Any = x ?: y
​
fun main() {
    elvisLike<String>("", "").length // OK
    elvisLike<String>("", null).length // 오류: 'null'은 non-null 타입의 값일 수 없습니다.
​
    elvisLike<String?>(null, "").length // OK
    elvisLike<String?>(null, null).length // 오류: 'null'은 non-null 타입의 값일 수 없습니다.
}


확실히 non-nullable 타입은 이 베타 릴리스에서 기본적으로 활성화됩니다. 추가 단계가 필요하지 않습니다.

확실히 non-nullable 타입에 대한 자세한 내용은 KEEP에서 확인하세요.


특정 위치에서 정규 표현식과 일치하는 기능


1.5.30에서 소개된 Regex.matchAt() 및 Regex.matchesAt() 함수는 이제 안정적입니다. 이 함수들은 문자열이나 CharSequence의 특정 위치에서 정규 표현식이 정확하게 일치하는지 확인하는 방법을 제공합니다.

- matchesAt() 함수는 일치 여부를 확인하고 불리언 결과를 반환합니다:
 

fun main(){
    val releaseText = "Kotlin 1.7.0 is on its way!"
    // 정규 표현식: 한 자리 숫자, 점, 한 자리 숫자, 점, 하나 이상의 숫자
    val versionRegex = "\\d[.]\\d[.]\\d+".toRegex()
​
    println(versionRegex.matchesAt(releaseText, 0)) // "false"
    println(versionRegex.matchesAt(releaseText, 7)) // "true"
}


- matchAt() 함수는 일치하는 경우 일치 항목을 반환하고, 찾지 못한 경우 null을 반환합니다:
 

fun main(){
    val releaseText = "Kotlin 1.7.0 is on its way!"
    val versionRegex = "\\d[.]\\d[.]\\d+".toRegex()
​
    println(versionRegex.matchAt(releaseText, 0)) // "null"
    println(versionRegex.matchAt(releaseText, 7)?.value) // "1.7.0"
}


이 YouTrack 이슈에서 피드백을 주시면 감사하겠습니다.
 

새로운 Kotlin/Native 메모리 매니저


저희는 계속해서 피드백을 수집하고 새로운 Kotlin/Native 메모리 매니저를 개선하고 있습니다. 현재 여러분은 Alpha 버전을 여러분의 프로젝트에서 시도해볼 수 있습니다. Kotlin 1.7.0-Beta는 개발자 경험을 더욱 향상시킬 성능 개선을 가져옵니다.

새로운 메모리 매니저는 JVM 및 Native 플랫폼 간의 차이를 제거합니다. 이는 멀티플랫폼 프로젝트에서 일관된 개발자 경험을 제공합니다. 예를 들어 Android 및 iOS에서 모두 작동하는 크로스 플랫폼 모바일 애플리케이션을 쉽게 만들 수 있게 될 것입니다.

새로운 Kotlin/Native 메모리 매니저는 스레드 간 객체 공유에 대한 제한을 해제합니다. 또한 특별한 관리나 어노테이션을 필요로하지 않는 안전하고 누수가 없는 동시 프로그래밍 기본 요소를 제공합니다.

새로운 메모리 매니저는 향후 버전에서 기본 메모리 매니저가 될 것이므로 지금 시도해 보기를 권장합니다. 새로운 메모리 매니저에 대한 자세한 내용을 알아보고 데모 프로젝트를 살펴보거나 직접 시도해 보기 위한 마이그레이션 지침을 참조하세요.

여러분의 프로젝트에서 새로운 메모리 매니저를 사용하여 작동 방식을 확인하고 피드백을 공유해 주세요. 이를 위해 우리의 이슈 트래커인 YouTrack을 사용할 수 있습니다.


JS 및 Native에서 명명된 캡처 그룹 지원


Kotlin 1.7.0-Beta부터는 명명된 캡처 그룹이 JVM (1.8 이상)뿐만 아니라 JS 및 Native에서도 지원됩니다.

캡처 그룹에 이름을 지정하려면 정규 표현식에서 (?<name>group) 구문을 사용하세요. 그룹이 일치하는 텍스트를 가져오려면 새로 추가된 MatchGroupCollection.get() 함수를 호출하고 그룹 이름을 전달하세요.


이름으로 일치하는 그룹 값을 검색


도시 좌표를 일치시키는 예제를 살펴보세요. 정규 표현식으로 일치하는 그룹의 컬렉션을 가져오려면 groups를 사용하세요. 그룹의 내용을 번호 (인덱스)로 검색하는 방법과 이름으로 value를 사용하는 방법을 비교하세요:
 

fun main() {
    val regex = "\\b(?<city>[A-Za-z\\s]+),\\s(?<state>[A-Z]{2}):\\s(?<areaCode>[0-9]{3})\\b".toRegex()
    val input = "Coordinates: Austin, TX: 123"
 
    val match = regex.find(input)!!
    println(match.groups["city"]?.value) // "Austin" — 이름으로
    println(match.groups[2]?.value) // "TX" — 번호로
}


이름으로 백 레퍼런스 사용


그룹을 백 레퍼런스할 때도 그룹 이름을 사용할 수 있습니다. 백 레퍼런스는 캡처 그룹에서 이전에 일치한 것과 동일한 텍스트를 일치시킵니다. 이를 위해 정규 표현식에서 \k<name> 구문을 사용하세요:
 

fun backRef() {
    val regex = "(?<title>\\w+), yes \\k<title>".toRegex()
    val match = regex.find("Do you copy? Sir, yes Sir!")!!
    println(match.value) // "Sir, yes Sir"
    println(match.groups["title"]?.value) // "Sir"
}


치환 표현식에서 명명된 그룹


마지막으로, 명명된 그룹 참조는 치환 표현식과 함께 사용할 수 있습니다. replace() 함수는 입력에서 정규 표현식의 모든 발생을 대체 표현식으로 대체하고 replaceFirst() 함수는 첫 번째 일치 항목만 바꿉니다.

치환 문자열에서 ${name}의 발생은 지정된 이름의 캡처 그룹에 해당하는 하위 시퀀스로 대체됩니다. 이름으로 그룹 참조를 사용하는 방법과 인덱스로 번호를 사용하는 방법을 비교하세요:

fun dateReplace() {
    val dateRegex = Regex("(?<dd>\\d{2})-(?<mm>\\d{2})-(?<yyyy>\\d{4})")
    val input = "Date of birth: 27-04-2022"
    println(dateRegex.replace(input, "\${yyyy}-\${mm}-\${dd}")) // "Date of birth: 2022-04-27" — 이름으로
    println(dateRegex.replace(input, "\$3-\$2-\$1")) // "Date of birth: 2022-04-27" — 번호로
}

 

새로운 기능을 시도하고 피드백을 제공하세요


이러한 새로운 기능은 1.7.0 미리보기 릴리스인 Kotlin 1.7.0-Beta에서 사용할 수 있습니다. IntelliJ IDEA 또는 Android Studio IDE에서 쉽게 설치할 수 있습니다.

Android Studio 플러그인 이름 변경 (베타)으로 인해 플러그인 설치가 1.6.20 이상 버전 위에 사용 가능합니다.

다음과 같은 방법으로 Kotlin 1.7.0-Beta를 설치할 수 있습니다.

  • Early Access Preview 업데이트 채널을 사용하는 경우, IDE에서 사용 가능하게 되면 자동으로 1.7.0-Beta로 업데이트하라는 제안이 표시됩니다.
  • Stable 업데이트 채널을 사용하는 경우, IDE에서 Tools | Kotlin | Configure Kotlin Plugin Updates를 선택하여 언제든지 Early Access Preview 채널로 변경할 수 있습니다. 그런 다음 최신 미리보기 릴리스를 설치할 수 있습니다. 자세한 내용은 이 지침을 참조하세요.

 
항상 다음 IDE의 최신 버전을 다운로드하여 Kotlin에 대한 풍부한 지원을 받을 수 있습니다.
 

  • Kotlin 애플리케이션을 다양한 플랫폼용으로 개발하는 데 사용되는 IntelliJ IDEA.
  • Android 및 크로스 플랫폼 모바일 애플리케이션을 개발하는 데 사용되는 Android Studio.

 
1.7.0-Beta를 설치한 후, 빌드 스크립트에서 Kotlin 버전을 1.7.0-Beta로 변경하는 것을 잊지 마세요.


문제가 발생하면:

 

  • 문제를 YouTrack 이슈 트래커에 보고하세요.
  • Kotlin Slack의 #eap 채널에서 도움을 찾으세요 (초대장 받기).
  • 최신 안정 버전으로 롤백하는 방법을 배우세요.

 

더 읽기

 

  • Early Access Preview에 참여하기
  • Kotlin 로드맵

 

원문

 
https://blog.jetbrains.com/kotlin/2022/05/kotlin-1-7-0-beta/

반응형

댓글