Skip to content

Kotlin 2.2.0-RC의 새로운 기능

릴리스 날짜: May 16, 2025

NOTE

이 문서는 Early Access Preview (EAP) 릴리스의 모든 기능을 다루지 않지만, 주요 개선 사항을 중점적으로 설명합니다.

전체 변경 사항 목록은 GitHub changelog를 참조하세요.

Kotlin 2.2.0-RC 릴리스가 출시되었습니다! 이번 EAP 릴리스의 세부 사항은 다음과 같습니다.

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 인터페이스에 대한 의존성을 가진 예시는 다음과 같습니다.

kotlin
// `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)에 사용 가능하지만 블록 내에서 이름으로 접근할 수는 없습니다.

kotlin
// Uses `_` as context parameter name
context(_: UserService)
fun logWelcome() {
    // Resolution still finds the appropriate `log` function from UserService
    outputMessage("Welcome!")
}

컨텍스트 파라미터 해결

Kotlin은 현재 스코프에서 일치하는 컨텍스트 값을 검색하여 호출 사이트에서 컨텍스트 파라미터를 해결합니다. 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을 참조하세요.

컨텍스트 파라미터를 활성화하는 방법

프로젝트에서 컨텍스트 파라미터를 활성화하려면, 명령줄에서 다음 컴파일러 옵션을 사용하세요.

Bash
-Xcontext-parameters

또는 Gradle 빌드 파일의 compilerOptions {} 블록에 추가하세요.

kotlin
// 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 옵션이었습니다.

새로운 솔루션을 통해 일반적인 규칙을 재정의하고 특정 진단을 일관된 방식으로 제외할 수 있습니다.

적용 방법

새 컴파일러 옵션은 다음 구문을 가집니다.

bash
-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).