Kotlin 2.2.0-RC의 새로운 기능
NOTE
이 문서는 Early Access Preview (EAP) 릴리스의 모든 기능을 다루지 않지만, 주요 개선 사항을 중점적으로 설명합니다.
전체 변경 사항 목록은 GitHub changelog를 참조하세요.
Kotlin 2.2.0-RC 릴리스가 출시되었습니다! 이번 EAP 릴리스의 세부 사항은 다음과 같습니다.
- 언어: 컨텍스트 파라미터 미리보기
- Kotlin 컴파일러: 컴파일러 경고 통합 관리
- Kotlin/JVM: 인터페이스 함수에 대한 기본 메서드 생성 변경 사항
- Gradle: KGP 진단 내 Problems API 통합 및 KGP의
--warning-mode
호환성
IDE 지원
2.2.0-RC을 지원하는 Kotlin 플러그인은 최신 IntelliJ IDEA 및 Android Studio에 번들로 제공됩니다. IDE에서 Kotlin 플러그인을 업데이트할 필요가 없습니다. 빌드 스크립트에서 Kotlin 버전을 2.2.0-RC으로 변경하기만 하면 됩니다.
자세한 내용은 새 릴리스로 업데이트를 참조하세요.
언어
이번 릴리스에서는 일부 언어 기능이 안정화되었으며, 컨텍스트 파라미터를 미리보기로 제공합니다.
안정화된 기능: 가드 조건, 비로컬 break 및 continue, 그리고 멀티-달러 보간
Kotlin 2.1.0에서 몇 가지 새로운 언어 기능이 미리보기로 도입되었습니다. 이러한 언어 기능이 이번 릴리스에서 안정화되었음을 발표하게 되어 기쁩니다.
Kotlin 언어 설계 기능 및 제안 전체 목록 보기.
컨텍스트 파라미터 미리보기
이번 릴리스에서는 컨텍스트 파라미터가 미리보기로 도입되었습니다. 컨텍스트 파라미터는 함수와 속성이 주변 컨텍스트에서 암시적으로 사용 가능한 의존성을 선언할 수 있도록 합니다.
이 기능은 컨텍스트 리시버(context receivers)라는 이전의 실험적 기능을 대체합니다. 컨텍스트 리시버에서 컨텍스트 파라미터로 마이그레이션하려면, 블로그 게시물에 설명된 대로 IntelliJ IDEA의 지원 기능을 사용할 수 있습니다.
컨텍스트 파라미터를 선언하는 방법
context
키워드를 사용하고 이어서 name: Type
형식의 파라미터 목록을 사용하여 속성 및 함수에 대한 컨텍스트 파라미터를 선언할 수 있습니다. UserService
인터페이스에 대한 의존성을 가진 예시는 다음과 같습니다.
// `UserService` defines the dependency required in context
interface UserService {
fun log(message: String)
fun findUserById(id: Int): String
}
// Declares a function with a context parameter
context(users: UserService)
fun outputMessage(message: String) {
// Uses `log` from the context
users.log("Log: $message")
}
// Declares a property with a context parameter
context(users: UserService)
val firstUser: String
// Uses `findUserById` from the context
get() = users.findUserById(1)
_
를 컨텍스트 파라미터 이름으로 사용할 수 있습니다. 이 경우, 파라미터 값은 해결(resolution)에 사용 가능하지만 블록 내에서 이름으로 접근할 수는 없습니다.
// Uses `_` as context parameter name
context(_: UserService)
fun logWelcome() {
// Resolution still finds the appropriate `log` function from UserService
outputMessage("Welcome!")
}
컨텍스트 파라미터 해결
Kotlin은 현재 스코프에서 일치하는 컨텍스트 값을 검색하여 호출 사이트에서 컨텍스트 파라미터를 해결합니다. Kotlin은 유형별로 일치시킵니다. 동일한 스코프 레벨에 여러 호환 가능한 값이 존재하는 경우, 컴파일러는 모호성을 보고합니다.
// `UserService` defines the dependency required in context
interface UserService {
fun log(message: String)
}
// Declares a function with a context parameter
context(users: UserService)
fun outputMessage(message: String) {
users.log("Log: $message")
}
fun main() {
// Implements `UserService`
val serviceA = object : UserService {
override fun log(message: String) = println("A: $message")
}
// Implements `UserService`
val serviceB = object : UserService {
override fun log(message: String) = println("B: $message")
}
// Both `serviceA` and `serviceB` match the expected `UserService` type at the call site
context(serviceA, serviceB) {
outputMessage("This will not compile")
// Ambiguity error
}
}
제약 조건
컨텍스트 파라미터는 지속적으로 개선 중입니다. 현재 일부 제약 조건은 다음과 같습니다.
- 생성자는 컨텍스트 파라미터를 선언할 수 없습니다.
- 컨텍스트 파라미터가 있는 속성은 백킹 필드(backing fields)나 초기화자(initializers)를 가질 수 없습니다.
- 컨텍스트 파라미터가 있는 속성은 위임(delegation)을 사용할 수 없습니다.
그러나 Kotlin의 컨텍스트 파라미터는 간소화된 의존성 주입, 개선된 DSL 설계 및 스코프 작업(scoped operations)을 통해 의존성을 관리하는 데 있어 상당한 개선을 의미합니다. 더 자세한 내용은 기능의 KEEP을 참조하세요.
컨텍스트 파라미터를 활성화하는 방법
프로젝트에서 컨텍스트 파라미터를 활성화하려면, 명령줄에서 다음 컴파일러 옵션을 사용하세요.
-Xcontext-parameters
또는 Gradle 빌드 파일의 compilerOptions {}
블록에 추가하세요.
// build.gradle.kts
kotlin {
compilerOptions {
freeCompilerArgs.add("-Xcontext-parameters")
}
}
DANGER
-Xcontext-receivers
와 -Xcontext-parameters
컴파일러 옵션을 동시에 지정하면 오류가 발생합니다.
피드백 남기기
이 기능은 향후 Kotlin 릴리스에서 안정화되고 개선될 예정입니다. 이슈 트래커인 YouTrack에 피드백을 주시면 감사하겠습니다.
Kotlin 컴파일러: 컴파일러 경고 통합 관리
Kotlin 2.2.0-RC은 새로운 컴파일러 옵션인 -Xwarning-level
을 도입합니다. 이 옵션은 Kotlin 프로젝트에서 컴파일러 경고를 관리하는 통합된 방법을 제공하도록 설계되었습니다.
이전에는 -nowarn
으로 모든 경고를 비활성화하거나, -Werror
로 모든 경고를 컴파일 오류로 전환하거나, -Wextra
로 추가 컴파일러 검사를 활성화하는 등 일반적인 모듈 전체 규칙만 적용할 수 있었습니다. 특정 경고에 대해 조정할 수 있는 유일한 옵션은 -Xsuppress-warning
옵션이었습니다.
새로운 솔루션을 통해 일반적인 규칙을 재정의하고 특정 진단을 일관된 방식으로 제외할 수 있습니다.
적용 방법
새 컴파일러 옵션은 다음 구문을 가집니다.
-Xwarning-level=DIAGNOSTIC_NAME:(error|warning|disabled)
error
: 지정된 경고를 오류로 승격합니다.warning
: 경고를 발생시키며 기본적으로 활성화됩니다.disabled
: 지정된 경고를 모듈 전체에서 완전히 억제합니다.
새 컴파일러 옵션으로는 _경고_의 심각도 수준만 구성할 수 있다는 점을 유의하세요.
사용 사례
새로운 솔루션을 통해 일반 규칙과 특정 규칙을 결합하여 프로젝트의 경고 보고를 더욱 세밀하게 조정할 수 있습니다. 사용 사례를 선택하세요.
경고 억제
| 명령어 | 설명 ```kotlin fun main() { //sampleStart println(93.toHexString()) //sampleEnd }
{kotlin-runnable="true"}
For more information, see [New HexFormat class to format and parse hexadecimals](whatsnew19.md#new-hexformat-class-to-format-and-parse-hexadecimal<ctrl62><ctrl61>s).