50. Kotlin support by ys

코틀린은 JVM에서 동작하는 프로그래밍 언어이다. 2011년 7월, 젯브레인사가 공개하였다. 캇린으로 읽어야 한다. 파일 확장자는 .kt 또는 .kts를 사용한다. (java vs kotlin)

  • 코틀린(Kotlin)은 인텔리제이(IntelliJ IDEA)라는 제품으로 유명한 젯브레인(JetBrains)에서 만든 언어

  • 자바와 100% 호환되어 자바로 작성된 프로젝트에 코틀린 코드를 추가할 수도 있고 자바코드를 모두 코틀린으로 대체할 수도 있습니다.

Kotlin 은 Java로 작성된 기존 라이브러리와의 상호 운용성 을 제공하면서 간결하고 우아한 코드를 작성할 수있는 JVM (및 기타 플랫폼)을 대상으로하는 정적 유형 언어 입니다.

Spring Boot는 Spring Framework, Spring Data, Reactor와 같은 다른 Spring 프로젝트의 지원을 활용하여 Kotlin 지원을 제공합니다. 자세한 내용은 Spring Framework Kotlin 지원 문서 를 참조하십시오.

Spring Boot와 Kotlin으로 시작하는 가장 쉬운 방법은 이 포괄적 인 튜토리얼 을 따르는 입니다. start.spring.io 를 통해 새로운 Kotlin 프로젝트를 만들 수 있습니다 . 언제든지 Kotlin Slack의 #spring 채널에 가입 하거나 지원이 필요한 경우 stack overflowspring and kotlin태그를 사용하여 질문하십시오 .

50.1 요구 사항

스프링 부트는 Kotlin 1.2.x를 지원합니다. 코 틀린를 사용하려면, org.jetbrains.kotlin:kotlin-stdliborg.jetbrains.kotlin:kotlin-reflect클래스 경로에 있어야합니다. kotlin-stdlib변종 kotlin-stdlib-jdk7과는 kotlin-stdlib-jdk8도 사용할 수 있습니다.

Kotlin 클래스는 기본적으로 최종 클래스 이므로 , 스프링 - 주석 클래스를 자동으로 열어 프록시 할 수 있도록 kotlin-spring 플러그인 을 구성 하려고 할 것입니다.

Jackson의 Kotlin 모듈Kotlin의 JSON 데이터 직렬화 / 직렬화에 필요합니다. 클래스 패스에서 발견되면 자동으로 등록됩니다. Jackson과 Kotlin은 있지만 Jackson Kotlin 모듈은없는 경우 경고 메시지가 기록됩니다.

이러한 종속성과 플러그인은 start.spring.io 에서 Kotlin 프로젝트를 부트 스트랩하는 경우 기본적으로 제공됩니다 .

50.2 NULL 안전성

Kotlin의 핵심 기능 중 하나는 null-safety 입니다. 그것은 다루는 런타임을 오히려 문제를 지연시키고, 오히려 NullPointerException을 만나기보다는 컴파일 타임에 null 값을 처리합니다. 이렇게하면 Optional과 같은 래퍼 비용을 지불하지 않고도 일반적인 버그 소스를 제거하는 데 도움이됩니다. Kotlin은 또한 Kotlin의 null-safety에 대한 포괄적 인 가이드 에서 설명한대로 nullable 값을 갖는 기능적 구성을 사용할 수 있습니다 .

자바는 타입 시스템에서 null-safety를 표현할 수 없지만, Spring Framework, Spring Data, Reactor는 이제 도구 친화적 인 주석을 통해 API의 null-safety를 제공합니다. 기본적으로 Kotlin에서 사용되는 Java API의 유형 은 null 체크가 완화 된 플랫폼 유형 으로 인식됩니다 . null 허용 주석과 결합 된 JSR 305 주석에 대한 Kotlin의 지원은 Kotlin의 관련 Spring API에 대해 null 안전을 제공합니다.

  • 객체 타입의 변수에서 널(null) 값의 허용 여부를 구분하지 않던 자바와 달리, 코틀린은 이를 명확히 구분합니다. 또한 널 값의 허용 여부를 컴파일 단계에서 검사하므로 런타임에서 발생하는 오류를 대폭 줄일 수 있습니다.

출처 : https://medium.com/@pjh880720/%EC%BD%94%ED%8B%80%EB%A6%B0-kotlin-%EC%9D%B4%EB%9E%80-50dba0b1b9c7

JSR 305 검사는 -Xjsr305={strict|warn|ignore} 옵션을 사용하여 -Xjsr305컴파일러 플래그를 추가하여 구성 할 수 있습니다 . 기본 동작은 -Xjsr305=warn와 같습니. 이 strict값은 Spring API에서 유추한 Kotlin 유형을 고려하여 null 안전성을 가져야하지만, Spring API 무효화 선언(nullability declaration)은 부 릴리스 사이에서도 발전 할 수 있고 앞으로 더 많은 검사가 추가 될 수 있다는 지식을 가지고 사용해야합니다.

일반 유형 인수, varargs 및 배열 요소 null 가능성은 아직 지원되지 않습니다. 최신 정보는 SPR-15942 를 참조하십시오 . 또한 Spring Boot 자체의 API 에는 아직 주석이 달려 있지 않다는 것을 명심하십시오 .

50.3 Kotlin API

50.3.1 runApplication

Spring Boot는 다음 예제 와 같이 runApplication<MyApplication>(*args)을 사용하여 응용 프로그램을 실행하는 관용적인 방법을 제공합니다 .

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class MyApplication

fun main(args: Array<String>) {
	runApplication<MyApplication>(*args)
}

이것은 SpringApplication.run(MyApplication::class.java, *args)의 드롭 인 대체품입니다. 이것 또한 다음 예제와 같이 응용 프로그램을 사용자 정의 할 수 있습니다.

runApplication<MyApplication>(*args) {
	setBannerMode(OFF)
}

50.3.2 확장

Kotlin 확장 은 추가 기능으로 기존 클래스를 확장하는 기능을 제공합니다. Spring Boot Kotlin API는 이러한 확장 기능을 사용하여 새로운 Kotlin 특정 편의 기능을 기존 API에 추가합니다.

TestRestTemplate확장은 Spring Framework의 Spring Framework를 위해RestOperations를 제공하는 것과 유사합니다. 무엇보다도 Kotlin의 유형화 된 매개 변수를 활용할 수있는 확장이 가능합니다.

50.4 의존성 관리

클래스 경로에 다른 버전의 Kotlin 의존성을 섞지 않으려면 다음과 같은 Kotlin 종속성의 종속성 관리가 제공됩니다.

  • kotlin-reflect

  • kotlin-runtime

  • kotlin-stdlib

  • kotlin-stdlib-jdk7

  • kotlin-stdlib-jdk8

  • kotlin-stdlib-jre7

  • kotlin-stdlib-jre8

Maven을 사용하면 Kotlin 버전을 kotlin.version속성을 통해 사용자 정의 할 수 있으며 플러그인 관리가 제공됩니다 kotlin-maven-plugin. Gradle을 사용하면 Spring Boot 플러그인 kotlin.version이 Kotlin 플러그인의 버전과 자동으로 정렬됩니다 .

50.5 @ConfigurationProperties

@ConfigurationPropertie는 생성자에 의해 초기화 된 불변 클래스는 아직 지원되지 않기 때문에 현재는 lateinit또는 null 허용 가능한 var속성 에서만 작동 합니다 (전자는 권장 됨) .

@ConfigurationProperties("example.kotlin")
class KotlinExampleProperties {

	lateinit var name: String

	lateinit var description: String

	val myService = MyService()

	class MyService {

		lateinit var apiToken: String

		lateinit var uri: URI

	}

}

주석 프로세서를 사용 하여 자신의 메타 데이터 를 생성하려면 spring-boot-configuration-processor 종속성을 사용하여 kapt구성해야합니다 .

50.6 테스트

Kotlin 코드를 테스트 하는 데 JUnit 4 (spring-boot-starter-test기본값이 제공 ) 를 사용할 수 있지만 JUnit 5가 권장됩니다. JUnit 5를 사용하면 테스트 클래스를 한 번 인스턴스화하고 모든 클래스 테스트에 다시 사용할 수 있습니다. 따라서 Kotlin에 적합한 비 정적 메서드에서 주석 @BeforeAll@AfterAll주석 을 사용할 수 있습니다 .

JUnit 5를 사용하려면 spring-boot-starter-testjunit:junit종속성을 제외하고 JUnit 5 종속성을 추가하고 그에 따라 Maven 또는 Gradle 플러그인을 구성하십시오. 자세한 내용은 JUnit 5 설명서 를 참조하십시오. 또한 테스트 인스턴스 수명주기를 "클래스 단위"전환 해야합니다 .

Kotlin class들을 mock하려면 MockK 을 권합니다. Mockito 에 맞는 @MockBean@SpyBean석이 필요한 Mockk 이 필요하다면, 당신은 SpringMockK 제공한 유사한 @MockkBean하고 @SpykBean주석을사용할 수 있습니다 .

영어로 Mock'은흉내내다'라는 의미를 가지고 있습니다. 목업(Mock-UP)은 실제 제품을 만들기 전 실물크기의 모형을 뜻하는데, IT제품 경우 실제 양산품을 만들기 전에 디자인을 구현해보기 위해 목업을 미리 만드는 것이 보편화돼 있습니다.

mockito는 유닛 테스트를 위한 Java mocking framework 입니다. mockito를 사용하면 대부분의 로직을 검증 할 수 있습니다.

50.7 Resources

50.7.1 추가 읽기

50.7.2 예제

Last updated