ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kotlin 2.4.0 신기능 소개
    Kotlin🖥 2026. 7. 8. 20:21

    What's New in Kotlin 2.4.0

    Kotlin 2.4.0은 2026년 6월에 릴리스됐습니다.
    가장 큰 흐름: 컨텍스트 파라미터 정식화, UUID API 안정화, 그리고 K1 컴파일러 완전 제거.


    🔑 한눈에 보는 핵심

    영역 핵심 변경
    언어 Context parameters Stable, explicit backing fields Stable, 컬렉션 리터럴(실험적)
    표준 라이브러리 kotlin.uuid.Uuid Stable, isSorted() 계열 추가
    Kotlin/JVM Java 26 바이트코드 지원, 메타데이터에 애노테이션 기본 기록
    Kotlin/Native CMS GC 기본 활성화, Swift export Alpha, LLVM 21
    Kotlin/Wasm 증분 컴파일 Stable, WebAssembly Component Model(실험적)
    Kotlin/JS value class → TS 클래스로 export
    ⚠️ Breaking K1 컴파일러 미지원 (-language-version=1.9 불가)

    1. 언어 기능 (Language)

    ✅ 이제 Stable이 된 기능들

    • Context parameters — (context arguments / callable references 제외) 정식 기능으로 승격
    • Explicit backing fields — 프로퍼티의 명시적 backing field
    • @all 메타 타깃 — 프로퍼티 애노테이션을 모든 대상에 한 번에 적용
    • use-site 애노테이션 타깃 기본 규칙 개선

    🧪 새로 추가된 실험적 기능

    Explicit context arguments — 오버로드된 컨텍스트 파라미터의 모호성 해소

    context(defaultEmailSender: EmailSender, defaultSmsSender: SmsSender)
    fun notifyUser() {
        sendNotification(emailSender = defaultEmailSender)
        sendNotification(smsSender = defaultSmsSender)
    }
    // 활성화: -Xexplicit-context-arguments

    Collection literals — 대괄호 문법으로 컬렉션 생성

    val shapes: MutableList<String> = ["triangle", "square", "circle"]
    val identityMatrix: DoubleMatrix = [
        [1.0, 0.0, 0.0],
        [0.0, 1.0, 0.0],
        [0.0, 0.0, 1.0],
    ]
    // 활성화: -Xcollection-literals

    Improved compile-time constantsconst가 unsigned 타입, 문자열 함수(.lowercase(), .uppercase(), .trim()), enum .name까지 평가

    // 활성화: -Xintrinsic-const-evaluation

    @IntroducedAt 애노테이션 — 바이너리 호환을 위한 버전 기반 오버로드 자동 생성

    fun Button(
        label: String = "",
        color: Color = DefaultColor,
        @IntroducedAt("1.1") borderColor: Color = DefaultBorderColor,
        @IntroducedAt("1.2") borderStyle: Style = DefaultBorderStyle
    )

    참고: import 마지막 세그먼트에 대한 deprecation 경고가 더 이상 표시되지 않습니다.


    2. 표준 라이브러리 (stdlib)

    UUID API 안정화

    kotlin.uuid.UuidStable (V4/V7 생성 함수 제외). UUID 비교, hex-and-dash / plain 텍스트 파싱, 잘못된 값에 null 반환 지원.

    정렬 여부 확인 함수 (새로 추가)

    numbers.isSorted()
    users.isSortedBy(User::age)
    values.isSortedDescending()
    values.isSortedWith(comparator)

    Unsigned → BigInteger 변환 (JVM)

    unsignedLong.toBigInteger()
    unsignedInt.toBigInteger()

    Map fallback 함수

    mapForNull.getOrPutIfNull("user") { "default_user" }
    mapForMissing.getOrPutIfMissing("user") { "default_user" }

    3. Kotlin/JVM

    • Java 26 지원 — Java 26 바이트코드 생성 가능
    • 메타데이터에 애노테이션 기본 기록 — 바이트코드와 함께 메타데이터에도 애노테이션 기록

    4. Kotlin/Native

    GC

    • CMS GC 기본 활성화 — 기존 PMCS를 대체, concurrent marking으로 pause 시간·반응성 개선
      • 비활성화: kotlin.native.binary.gc=pmcs

    성능 & 호환성

    • devirtualization 분석 시 메모리 사용량 약 50% 감소
    • Xcode 26.4 지원, LLVM 21 업데이트
    • 최소 Apple OS 버전 상향
      • iOS/tvOS: 14.0 → 15.0
      • macOS: 11.0 → 12.0
      • watchOS: 7.0 → 8.0

    Swift 상호운용성

    • Swift export → Alpha 승격, concurrency 지원 개선
      suspend fun hello(): String { delay(1000); return "Hello Swift!" }
      // Swift: let msg = try await hello()
    • Flow → Swift AsyncSequence export
      fun flowOfStrings(): Flow<String> = flowOf("hello", "any", "world")
      // Swift: for await element in flowOfStrings().asAsyncSequence()
    • Swift 패키지 import — Swift 패키지를 Gradle 의존성으로 선언 (iOS 앱)

    5. Kotlin/Wasm

    • 증분 컴파일 기본 활성화 & Stable
    • WebAssembly Component Model 지원(실험적) — 서버리스/FaaS 앱 가능
    • Chrome DevTools 디버깅 개선 — 내부 변수에 ~ 접두사로 가시성 향상

    6. Kotlin/JS

    • value class export — inline value class가 일반 TypeScript 클래스로 export
    • js() 인라이닝에서 ES2015 기능 지원const, let, 화살표 함수, spread, 템플릿 문자열
      fun spreadExample(): dynamic = js("""
        const sum = add(...nums);
        const b = [...a, 4, 5, 6];
      """)
    • 타입 variance 보존 — TS 출력에 in/out 유지
    • @JsNoRuntime 애노테이션 — Kotlin 인터페이스를 메타데이터 없이 TS 인터페이스로 직접 매핑
    • 인터페이스 export 개선 (중첩 클래스·companion object)

    7. 빌드 도구

    Gradle

    • 호환: Gradle 7.6.3 ~ 9.5.0, 최소 AGP 8.5.2
    • 플랫폼 간 일관된 모듈 이름: {group}:{project_name}
    • Kotlin/JVM 컴파일러 메시지를 Gradle Problems API로 전달

    Maven

    • JVM 타깃 자동 정렬 — Java 컴파일러 버전에 맞춰 자동 정렬
    • Maven Toolchains 지원JAVA_HOME과 독립적으로 JDK 버전 설정

    8. 컴파일러 & 플러그인

    • 모듈 내 인라인 함수 일관 인라이닝.klib 컴파일 시 같은 모듈의 inline 함수 인라이닝 (기본 활성화, 끄기: -Xklib-ir-inliner=disabled)
    • Partial linkage 항상 활성화-Xpartial-linkage deprecated (로그 레벨: -Xpartial-linkage-loglevel=INFO|WARNING|ERROR)
    • kaptincludeCompileClasspath로 불필요한 애노테이션 프로세서 제외
    • Power-assert — 새 런타임 라이브러리(CallExplanation, @PowerAssert)
    • Compose 컴파일러StrongSkipping, IntrinsicRemember 플래그가 DeprecationLevel.ERROR (2.5.0에서 제거 예정)

    ⚠️ 9. Breaking Changes (중요)

    • K1 컴파일러 완전 미지원-language-version=1.9 더 이상 사용 불가
    • Maven KotlinScriptMojo를 통한 Kotlin 스크립트 실행 제거

    🔭 다음 버전 (2.4.20, 2026년 9월 예정)

    2.4.20-Beta1 기준: 코루틴 stack trace 복구, Kotlin/Native klib 기본 증분 컴파일, Kotlin/Wasm의 top-level require() 변경 및 companion object 초기화 순서 개선, Kotlin/JS 브라우저 테스트용 새 DSL.


    참고 자료

Designed by Tistory.