코틀린 1.4.20에서 새로 추가된 것들
코틀린 1.4.20에서는 새로운 experimental 기능과, 기존에 존재하던 기능에 대한 성능향상 및 버그 수정 등이 있었습니다.
코틀린/JVM
코틀린/JVM에서는 최신 자바 버전의 기능들을 따라잡는 방향으로 개선사항들이 있었습니다.
- 자바 15 타겟
- invokedynamic string concatenation
1. 자바 15 타겟
코틀린/JVM 타겟으로 자바 15버전을 사용할 수 있게 되었습니다.
2. invokedynamic string concatenation
invokedynamic string concatenation은 experimental 기능으로 언제든지 없어질 수 있고, 변경될 수 있습니다.
코틀린 1.4.20에서는 JVM 9이상이 타겟일 경우 string concatenation을 dynamic invocation하게 컴파일할 수 있습니다. 그렇기 때문에 성능면에서 더 좋아졌습니다.
현재, 기능은 experimental 한 상황이고 아래 케이스들에서 사용 가능합니다.
- 연산자 a + b, 명시적 a.plus(b), ( (a::plus) (b) ) 형태에서의 String.plus
- inline, 데이터 클래스들에서의 toString
- 하나이고, non-constant한 파라리터를 제외한 string template
invokedynamic string concatenation을 활성화 시키고 싶다면 아래 값들중 하나를 -Xstring-concat 컴파일 옵션에 추가하면 됩니다.
- string들을 StringConcatFactory.makeConcatWithConstants()로 invokedynamic concatenation을 수행시키기 위한 indy-with-constants
- strings들을 StringConcatFactory.makeConcat()으로 invokedynamic concatenation을 수행시키기 위한 indy
- StringBuilder.append()와 같은 전통적인 방법으로 전환할 수 있는 inline
표준 라이브러리
코틀린 1.4.20 표준 라이브러리에서는 파일을 다룰 때 사용할 수 있고, 성능이 좋아진 확장 기능을 제공합니다.
- java.nio.file.Path의 확장 기능
- String.replace 함수 성능 개선
1. java.nio.file.Path의 확장 기능
java.nio.file.Path 확장 기능은 Experimental 합니다. 그렇기 때문에 언제든지 없어질 수 있고, 변경될 수 있습니다.
이제 표준 라이브러리에서 java.nio.file.Path의 experimental한 확장 기능을 제공합니다. 이 모던한 JVM 파일 API를 코틀린 스럽게 사용하는 방법은 java.io.File을 확장한 kotlin.io 패키지를 사용하는것과 유사합니다.
// construct path with the div (/) operator
val baseDir = Path("/base")
val subDir = baseDir / "subdirectory"
// list files in a directory
val kotlinFiles: List<Path> = Path("/home/user").listDirectoryEntries("*.kt")
확장기능은 kotlin-stdlib-jdk7 모듈 내부의 kotlin.io.path 패키지에서 사용가능합니다. 이 확장기능을 사용하려면 @ExperimentalPathApi 어노테이션을 붙여야 합니다.
2. String.replace 함수 성능 개선
String.replace() 함수 실행 속도가 빨라졌습니다. 대소문자를 구분하는 경우는 indexOf를 기반으로 한 루프로 대체하였고, 대소문자를 구분하지 않는 경우는 정규 표현식 매칭을 사용하였습니다.
출처
'Kotlin' 카테고리의 다른 글
코틀린 1.4, 1.5 버전에서의 변경사항 (0) | 2021.08.15 |
---|---|
(번역글) kotlin 1.5.20 릴리즈 노트 (0) | 2021.08.15 |
(번역글) 코틀린 1.5.0 버전 릴리즈 노트 (0) | 2021.08.14 |
(번역글) 코틀린 1.4.30 릴리즈 노트 (0) | 2021.08.12 |
(번역글) 코틀린 1.4.0 버전 변경 사항 (0) | 2021.07.24 |