Groo
안드로이드 개발자를 위한 Kotlin 2.0의 주요 변경사항 본문
지난달, 5월 21일에 Kotlin 2.0이 릴리즈 되었는데요.
안드로이드 개발자 관점에서 중요한 변경사항들 살펴보겠습니다.
Gradle 8.3 이상 버전을 사용하는 것을 권장함
Gradle 최소 버전은 여전히 6.8.3이긴 하나 Kotlin 2.0에서 Gradle 8.3 미만 버전을 사용하면 아래 케이스들에서 몇 가지 제한사항들이 생길 수 있어서 Gradle 8.3 이상 버전을 사용하는 것을 권장합니다.
- buildSrc 방식으로 소스 코드를 컴파일하는 경우
- included builds 방식으로 Gradle 플러그인을 컴파일하는 경우
Compose 컴파일러가 Gradle plugin 방식으로 변경됨
이전까지는 Compose 컴파일러와 Kotlin이 따로 관리가 되어서 서로 호환되는 버전으로 매핑시켜 주는 작업이 번거로웠는데요. 이런 문제를 해결하기 위해서 Compose 컴파일러가 Kotlin Repository에 머지되었습니다. 즉, Compose 컴파일러 버전도 이제 2.0이며 앞으로 Compose 컴파일러와 Kotlin 버전은 같은 버저닝으로 함께 업데이트됩니다.
기존에 모듈별 build.gradle 파일에서 kotlinCompilerExtensionVersion 변수에 컴파일러 버전을 설정해 주던 방식에서
// 모듈별 build.gradle
android {
composeOptions {
kotlinCompilerExtensionVersion = "1.5.14"
}
}
Gradle plugin 방식으로 변경되었습니다.
// 프로젝트 build.gradle
plugins {
id("org.jetbrains.kotlin.plugin.compose").version("2.0.0").apply(false)
}
// 모듈별 build.gradle
plugins {
id("org.jetbrains.kotlin.plugin.compose")
}
Kotlin 빌드 결과물이 저장되는 디렉터리가 변경됨
이전까지는 <project-root-directory>/.gradle/kotlin 디렉터리에 Kotlin 빌드 결과물이 저장되었지만 Gradle과 Kotlin을 조금 더 구분시키기 위한 목적으로 앞으로는 <project-root-directory>/.kotlin 디렉터리에 Kotlin 빌드 결과물이 저장됩니다.
Git Repository에는 Kotlin 빌드 결과물이 포함되지 않아야 하므로 .gitignore 파일에 신규 디렉터리를 추가해야 합니다.
.kotlin/
kotlinOptions DSL이 deprecated 됨
이전까지는 kotlinOptions DSL에서 jvmTarget이나 freeCompilerArgs 같은 옵션 등을 설정했지만 해당 DSL이 Kotlin 컴파일러와 관련된 모든 처리를 담당하고 있어서 역할 분리를 시키기 위한 목적으로 deprecated 되었습니다.
android {
kotlinOptions {
jvmTarget = "17"
freeCompilerArgs = listOf("-Xjsr305=strict")
}
}
앞으로 Kotlin 컴파일러 관련된 옵션들은 compilerOptions DSL을 통해 설정할 수 있습니다.
android {
kotlin {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_17)
freeCompilerArgs.set(listOf("-Xjsr305=strict"))
}
}
}
AGP 최소 지원 버전이 변경됨
Kotlin 1.9에서는 AGP 4.2.2가 최소 지원 버전이었으나 Kotlin 2.0에서는 최소 7.1.3 이상의 AGP 버전을 사용해야 합니다.
참고한 자료
- https://kotlinlang.org/docs/whatsnew20.html
- https://kotlinlang.org/docs/gradle-configure-project.html#apply-the-plugin
- https://medium.com/@l2hyunwoo/kotlin-2-0으로-마이그레이션하기-1742f294df51
글쓴이를 더 알고 싶다면
'프로그래밍 언어 > Kotlin' 카테고리의 다른 글
lifecycleScope와 viewModelScope의 한계 (0) | 2022.04.18 |
---|---|
flatMapMerge를 활용하여 Flow 변환 병렬 처리 (0) | 2022.04.17 |
flatMapLatest를 활용하여 flatMapConcat의 한계 극복 (0) | 2022.04.17 |
flatMapConcat을 활용하여 Flow를 다른 Flow로 변환 (0) | 2022.04.16 |
conflate를 활용하여 최신 데이터 collect (0) | 2022.04.03 |