Gradle은 빌드 자동화 도구이며, Groovy와 Kotlin 두 가지 언어를 사용하여 빌드 스크립트를 작성할 수 있다.
이전에는 다음과 같이 Gradle과 Maven으로만 빌드 툴이 나누어져 있었다면,
최근에는
Groovy와 Kotlin으로 세분화 되어있는 것을 볼 수가 있다.
일단, Gradle과 Maven 모두 JAVA의 Build Tool이지만, 최근에는 Gradle이 더 많이 쓰이는 추세이다.
이유는 다음과 같다.
- xml로 관리되는 Maven에 비해 짧고 간결한 문법
- Maven에 비해 C/C++ 등 다른 언어에서도 사용가 능한 범용성과 호환성
- 최소 2배에서 빌드 캐시를 사용하는 대규모 빌드의 경우 100배 정도의 성능차이
그렇다면, Gradle-Groovy(기존의 Gradle) 에서 Gradle-Kotlin이 파생된 이유는 무엇일까?
1. 차이점
- Groovy로 작성된 빌드 스크립트:
- 초기에는 Gradle의 주요 빌드 스크립트 언어로 Groovy가 사용되었다.
- Groovy는 Java와의 상호 운용성이 뛰어나며, 동적 타이핑, 간결한 문법, 그리고 강력한 메타프로그래밍 기능을 제공한다.
- Groovy로 작성된 빌드 스크립트는 간단하게 읽히고 쓰기가 쉽다.
// Groovy-based build script example
plugins {
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'com.example:library:1.0'
testImplementation 'junit:junit:4.12'
}
- Kotlin으로 작성된 빌드 스크립트:
- Gradle 5.0 이후부터는 Kotlin DSL을 사용하여 빌드 스크립트를 작성하는 것이 공식적으로 지원된다.
- Kotlin은 정적 타이핑, 안전성, 식(expression) 기반 문법 등의 특성을 제공하며, IntelliJ IDEA와 같은 Kotlin에 대한 강력한 지원을 받고 있다.
// Kotlin-based build script example
plugins {
kotlin("jvm") version "1.5.0"
}
repositories {
mavenCentral()
}
dependencies {
implementation("com.example:library:1.0")
testImplementation("junit:junit:4.12")
}
Kotlin DSL은 정적 타이핑으로 인해 IDE에서 코드 완성 및 오류 감지가 강력하게 지원되는 장점이 있다.
예시를 보자.
구글이나 블로그에서 코드를 긁어오다 보면, 다음과 같이 종속성을 추가할 때, 형태를 달리해서 긁어올 때가 있을 수 있다.
dependencies {
implementation("com.example:library:1.0")
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation("junit:junit:4.12")
}
Groovy는 해당 코드에 에러를 띄우지 않지만, Kotlin은 해당 코드에 에러를 띄우게 된다.
여러 사람들과 협업하여 진행하는 프로젝트는 일관된 규칙이 있어야 (컨벤션) 오류를 최소화할 수 있다.
그런 측면에서 Kotlin Gradle의 경우 ("") 구문만 사용하도록 강제하는 부분과, IDE의 지원으로 오류를 강조해주는 부분이 장점으로 작용할 수 있다.
(다만, IDE에서의 지원은 인텔리제이와 안드로이드 스튜디오에서만 한정된다.)
2. 단점??
그렇다면 Kotlin이 무조건적으로 좋냐??
그것은 아니다.
- build cache가 Invalidation 되거나 clean build 시 Kotlin이 Groovy DSL 보다 느리다.
- 새로운 라이브러리 버전의 Inspection 기능 미지원
- Gradle 5.0, Java 8 부터 지원
해당 제약사항과 매우 미세한 빌드 속도 차이가 있다는 정도이다.
3. 선택
Gradle-Kotlin의 장점이 명확하다고 하나
아직 참고 문헌이나 검색량, 대중성 측면에서 보편적인 Gradle-Groovy이 압도적으로 많이 쓰이는 것을 알 수 있다.
실제로도 gradle 공식 홈페이지를 참고하더라도, groovy를 먼저 보여주고 kotlin을 선택사항 처럼 보여주기도 한다.
물론 groovy와 kotlin 둘 중 어느 것을 선택하더라도 호환성의 문제는 크게 되지 않는다.
결론은 취향차이!!