이 포스팅에서는 `IntelliJ` 기반으로 코틀린으로 개발하기 위한 기본적인 설정을 정리한다. 각 버전 정보는 아래와 같다.
- IntelliJ : 2020.1.1 (#IU-201.7223.91)
- Kotlin : 1.3.72
- Gradle : 5.6.4
프로젝트 생성
'build.gradle' 파일 작성
buildscript {
ext.kotlin_version = '1.3.72'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
apply plugin: 'java'
apply plugin: 'kotlin'
sourceCompatibility = '1.8'
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
}
compileKotlin {
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
}
위 처럼 `kotlin-stdlib-jdk8` 의존성을 추가하게 되는데, 이는 직관적으로 알 수 있듯이 jdk8이하의 feture들과 호환되는 코틀린 표준 라이브러리를 제공한다. 관련해서는 이곳에서 나름 자세한 정보를 얻을 수 있다.
코틀린의 default JVM target 은 1.6 이다. 따라서 `kotlin-gradle-plugin` 에서 제공하는 코틀린 컴파일 태스크에 `jvmTarget` 속성 값을 추가해야한다. 만약 그 부분을 누락했다면 아래와 같은 에러를 만나게 될 것이다.
또 해당 플러그인을 적용하게 되면 코틀린의 `sourceSets`가 자동적으로 설정된다. 다만, 자동 설정이 적용 되려면 `src` 디렉토리 구성을 아래와 같이 해주어야 한다. 물론 별도의 설정으로 디렉토리를 특정 할 수 있다. (이 부분은 java 플러그인과 동일)
코틀린을 그래들 환경에서 사용하는 것은 여러모로 좋은 것 같다. 물론 설정의 압박이 있긴 하지만 그 후엔 의존성 추가로 스프링 부트, JPA 등으로 발전 시키기가 수월하다. 물론 'kotlinc'를 사용해 REPL방식으로 코딩하려면 별도의 설치가 필요하긴 하지만. (이 모든것 이전에 JDK 설치는 당연히 필수)
HelloWorld!
fun main(args: Array<String>) {
println("Hello World!")
}
모든 것의 시작인 'HelloWorld' 예제이다.
자바와 비슷한 것 같으면서도(사실 Scala와 더 비슷하다..) 다른 문법적인 요소들이 눈에 띈다.
여담
작년 2019 스프링캠프에서 3~4개의 세션이 코틀린 관련으로 진행 되었던 것으로 알고 있다. 그 세미나에 참석하진 못했지만 해당 세션들을 훑어보고, 이제는 코틀린이 정말로 대세가 될 것 같은 느낌이 들었던 기억이 있다. 게다가 최근 들리는 소문으로는 각종 메이저 IT 회사부터 스타트업까지 상당수의 신규 프로젝트를 코틀린으로 작성하고 있다고 한다.
이런 대세의 흐름에 힘입어, 나 또한 최근 소규모 신규 프로젝트를 코틀린 기반의 SpringBoot 어플리케이션으로 진행했다. (그리고 JPA와 Kafka Consumer를 첨가..ㅎ) 현재 개발환경에 배포한 상태이고 아주아주 잘 돌아가고 있다. 소규모긴 하지만 코틀린으로 작성해보니 정말 여러 장점이 눈에 띄었던 것 같다. 팔은 안으로 굽는다고 동사(同社)의 제품인 IntelliJ와 완벽하게 궁합이 맞는 것부터 시작해서, 'Lombok' 과의 결별, 그리고 온갖 문법적 설탕(Syntactic Sugar)까지... 지금 다 말할 수 없을 정도다.
다만 아직까지 코틀린을 자바를 알고 있는 정도로 잘 알진 못하기에, 앞으로 계속 학습하여 점점 'Kotlinic'한 프로젝트로 발전시켜갈 계획이다. 그리고 후에 내가 속해있는 조직으로 전파하여, 레거시까진 아니더라도 모든 신규프로젝트가 코틀린으로 작성되기를 바라는 원대한(?) 포부도 있다.
여하튼, 더 이상 썰을 늘어놓으면 이 포스트는 배보다 배꼽이 더 커질 것 같다. 지금까지 공부한 것, 앞으로 공부할 것에 대해 아주아주 매력적인 코틀린의 feture들만 포스팅할 예정이긴 한데, 왕복 4시간 출퇴근과 육아 때문에 시간이 될진 모르겠지만 최선을 다해 봐야지..
'Language' 카테고리의 다른 글
제네릭, 그리고 변성(Variance)에 대한 고찰 (2) - Kotlin (3) | 2020.12.13 |
---|---|
제네릭, 그리고 변성(Variance)에 대한 고찰 (1) - Java (1) | 2020.11.04 |
[Kotlin] 함수 (0) | 2020.06.29 |
[Kotlin] Property와 Data Class (0) | 2020.06.25 |