티스토리 뷰

Kotlin?

  • KotlinIntelliJ IDEA의 제작사로 유명한 JetBrains이 만든 개발 언어이다. Java 언어에 조예가 깊은 전문가 집단이 엔터프라이즈 레벨의 애플리케이션을 최소의 공수로 유지보수가 쉽도록 새롭게 만든 언어라고 말할 수 있다. 수년간의 베타 기간을 거쳐 2016년 1.0이 첫 공개되었으며 글을 작성하는 현재 1.9.23이 출시된 상태이다.

Java, Kotlin 언어를 같은 프로젝트에서?

  • KotlinJava와 같은 JVM 생태계를 공유한다. Java 언어로 작성한 소스 코드가 javac에 의해서 중간 언어인 .class로 컴파일되는 것과 동일하게 Kotlin 언어로 작성한 소스 코드 또한 kotlinc에 의해서 .class로 컴파일 된다. 컴파일된 2개 파일은 JVM에 의해서 차별 없이 동일하게 실행된다. 우리는 Gradle, IntelliJ IDEA와 같은 현대적인 개발 도구의 도움으로 편리하게 2개 언어를 같은 프로젝트에서 상호 공존하며 작성할 수 있다.

Kotlin 도입 첫 걸음

  • IntelliJ IDEAKotlin 제작사 답게 기존 .java 파일을 .kt로 클릭 한방에 자동 변환해주는 Convert to Java File to Kotlin 기능을 제공한다. (프로젝트 트리에서 변환할 Java 파일에서 마우스 우클릭하면 해당 기능이 나타난다.) 완전히 완벽하지는 않아서 자동 변환 후에는 소스 코드의 규모와 복잡도에 따라 어느 정도는 직접 수정이 필요하다. 이 기능을 처음 실행하면 해당 소스 파일 변환 뿐만 아니라 build.gradle 파일까지 자동으로 업데이트해주기 때문에 굉장히 편리하다.

Spring Boot 3 + Spring Data JPA + Querydsl

  • 비교적 단순한 프로젝트는 Convert to Java File to Kotlin 기능 실행과 몇가지 수작업으로 충분하다. 추가적으로 백엔드 개발에서 가장 대중적인 기술 스택 중 하나인 Spring Boot 3 + Spring Data JPA + Querydsl 환경에 Kotlin을 추가하려면 프로젝트 루트의 build.gradle 파일에 아래 내용을 추가하면 완벽히 작동하게 된다.
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

buildscript {
    ext {
        kotlinVersion = '1.9.23'
        springBootVersion = '3.2.3'
        querydslVersion = '5.1.0'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}")
        classpath("org.jetbrains.kotlin:kotlin-allopen:${kotlinVersion}")
        classpath("org.jetbrains.kotlin:kotlin-noarg:${kotlinVersion}")
    }
}

plugins {
    ...
    id 'org.jetbrains.kotlin.jvm' version "${kotlinVersion}"
    id 'org.jetbrains.kotlin.plugin.spring' version "${kotlinVersion}"
    id 'org.jetbrains.kotlin.plugin.jpa' version "${kotlinVersion}"
    id 'org.jetbrains.kotlin.kapt' version "${kotlinVersion}"
    id 'org.jetbrains.kotlin.plugin.lombok' version "${kotlinVersion}"
    id 'io.freefair.lombok' version '8.1.0'
    id 'idea'
}

dependencies {
    ...
    implementation 'org.jetbrains.kotlin:kotlin-reflect'
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
    implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
    // Disable existing Java parts when applying Querydsl
    // annotationProcessor "com.querydsl:querydsl-apt:${querydslVersion}:jakarta"
    kapt "com.querydsl:querydsl-apt:${querydslVersion}:jakarta"
}

kapt {
    keepJavacAnnotationProcessors = true
}

tasks.withType(KotlinCompile).configureEach {
    kotlinOptions {
        freeCompilerArgs += '-Xjsr305=strict'
        jvmTarget = '21'
    }
}

참고 글

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함