Gradle 구성 파일(build.gradle 등)에서 사용하던 Groovy언어 대신 Kotlin을 사용가능하다고 한다.
물론 우리가 그냥 사용하는 Kotlin이 아닌
Kotlin script인 'KTS'라는 형태로!
심지어 안드로이드, Gradle 공식사이트들도 앞으로 이게 더 우세할 거라 선언까지 해놨다. ▽
하지만 나름 단점도 있으니 잘 알고 적용해야한다.
우선, DSL이 뭔지 알아야 한다.
Groovy도 DSL이고, KTS도 DSL이다.
DSL (Domain Specific Language)이란?
- '특정 분야에 최적화된 프로그래밍 언어'를 일컫는다. Ex) SQL, CSS, 정규표현식, make 등
= '특정 영역(도메인)에 초점을 맞추고 기능을 제한함으로써 간결&효율적으로 목표를 달성하기 위한 언어' (모든 문제를 풀 수 있는 범용 프로그래밍 언어과는 다름)
[범용 언어 VS DSL언어]
- 범용 언어 : 모든 종류의 소프트웨어 문제를 목표로 하는 컴퓨터 언어
- DSL 언어 : 특정 종류의 문제를 목표로 하는 컴퓨터 언어
- 선언적인 방식의 문법이다. ex) select * from my_table (명령적인 일반 프로그래밍 언어와는 다름)
- '안드로이드'에서는 빌드 기능을 목표로 DSL언어인 Groovy와 KTS(Kotlin script)이 있다.
Kotlin script vs Kotlin DSL vs KTS
Kotlin script 이란?
- 스크립팅 언어로 CMD에서 실행할 수 있는 Kotlin 코드를 일컫는다
- Kotlin script 파일은 '.kts' 확장자를 가진다.
- 어떻게?
ㄴ> Kotlin은 일반적으로 사용할 때 IDE(IntelliJ IDEA 또는 Android Studio)를 사용하지만, 자체적으로 실행가능한 컴파일러 독립 버전?(=Standalone version of the compile)으로도 사용가능하다.
이 때는 IDE 없이 독립형 컴파일러?로 CMD에서 실행시키는 것도 가능하며, Kotlin을 스크립팅 언어로 CMD에서 실행시킬 수도 있다.
Kotlin DSL 이란?
- Gradle의 모든 Kotlin DSL을 일컫기도 하고, 이 중 '안드로이드 Gradle 플러그인된 Kotlin DS'L을 일컫기도 한다.
- Groovy에서 이전하는 맥락에서는 'KTS'와 'Kotlin DSL'이나 동일하다.
(Android 프로젝트를 Groovy에서 KTS로 변환하거나 Groovy에서 Kotlin DSL로 변환하는 것은 동일한 말)
KTS 란?
- Kotlin언어를 기반으로 한 DSL이며, 안드로이드 'Gradle 빌드 구성 파일'에 사용가능한 Kotlin script 언어이다.
- 안드로이드 Build gradle 로 채택된 DSL 언어(Groovy, KTS 등) 중 하나이다.
- 내부 DSL 방식으로 개발되었다 -> 일부는 범용적 문제 해결을 위한 일반 프로그래밍 언어처럼, 일부는 특정 분야에 최적화용도로 사용가능하다.
- [사용조건]
- Android Gradle 플러그인 4.0에서부터 사용가능 (Gradle은 5.0 부터 지원)
- [장점]
- 컴파일 타임에 에러 확인이 가능하다.
- for문으로 반복 빌드 설정을 한번에 추가가능 (여러 모듈에서 동일하게 필요한 라이브러리 등)
- 코드 편집기에서 더 나은 기능을 제공
- 코드 탐색, 자동 완성, 오류 강조표시, 구문 강조, 빠른 문서보기, 리팩터링 도구 등을 제공한다.
- 안드로이드 스튜디오에서 대부분 지원하므로 특히 유용하다
- [단점]
- Groovy를 사용하는 빌드보다 느리다
※ 따라서, KTS로 이전할지 여부를 결정할 때는 빌드 성능을 고려가 필요하다. ※
KTS 적용법
- 안드로이드 프로젝트에서
1) 프로젝트 root에 'buildSrc' 폴더를 생성 후
'buildSrc' 폴더 내 'build.gradle.kts' 파일을 생성하고 아래와 코드를 넣는다.
plugins {
`kotlin-dsl`
}
repositories {
jcenter()
}
2) 'buildSrc' 폴더 내 'src/java/main/{패키지명}' 패키지를 만들고 여기에 '{원하는이름}.kt' 파일을 생성하고, gradle의 android 내에 필요한 공통 config 들을 정의합니다.
(방법이 개발하기 나름이라 다 다름)
object {원하는이름} {
object Apps { // 하위 object 없이 사용해도 됨
const val compileSdk = 29
const val minSdk = 21
const val targetSdk = 29
const val versionCode = 1
const val versionName = "1.0.0"
}
// 기타 라이브러리 버전명 등을 명시
// 공통 사용되는 configuration 값 등을 명시
}
3) 한 번에 한 파일씩 KTS로 변환한다
ㄴ> settings.gradle, (앱 단) build.gradle, (프로젝트 단) build.gradle 파일 이름을
ㄴ> settings.gradle.kts, (앱 단) build.gradle.kts, (프로젝트 단) build.gradle.kts 로 변경
4) 3번 파일 내용들을 KTS 문법 형식으로 변환한다.
KTS 문법
- 공식사이트가 더 최신으로 잘 정리되어 있으니 참조
Kotlin DSL 을 알면 그 활용범위가 더 넓어지니 알아두면 좋을 것 같다.
https://docs.gradle.org/current/userguide/kotlin_dsl.html#kotlin_dsl
[출처]
- [Gradle 공식] Gradle Kotlin DSL 입문서 : https://docs.gradle.org/current/userguide/kotlin_dsl.html#kotlin_dsl
- [Android 공식] Groovy에서 KTS로 빌드 구성 이전 : https://developer.android.com/studio/build/migrate-to-kts
- [Gradle 공식] Kotlin DSL release : https://docs.gradle.org/5.0/release-notes.html
- DSL :
https://martinfowler.com/bliki/DomainSpecificLanguage.html
https://taes-k.github.io/2021/09/22/kotlin-dsl/
https://techblog.woowahan.com/2625/
- KTS 적용하기 : https://seansation-blog.tistory.com/7
- KTS
- Kotlin DSL 문법
- https://myungpyo.medium.com/kotlin-dsl-%EA%B0%84%EB%8B%A8%ED%9E%88-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-5f95fddf00f9
- https://taes-k.github.io/2021/09/22/kotlin-dsl/