기술지원 문의는 로그인 후에 가능합니다.
확인21-04-29
안녕하세요 JetBrains 한국 총판 단군소프트입니다. Kotlin 1.5.0-RC가 출시되었습니다!!(짝짝짝) Kotlin 1.5.0-RC는 1.5.0에 계획된 모든 기능과 함께 사용할 수 있습니다. 지금 당장 1.5.0-RC를 활용해 실제 프로젝트에서 최신 Kotlin API를 사용해 보고 릴리스 버전을 개선할 수 있도록 피드백을 보내주세요! 발견한 모든 문제를 이슈 트래커 YouTrack에 보고해 주시면 더욱 빨리 1.5.0 정식 버전을 만나보실 수 있습니다! 오늘은 여러분이 궁금해하실 만한 1.5.0-RC의 Kotlin 표준 및 테스트 라이브러리 변경 사항을 아래에 정리해 두었습니다. - 안정적인 부호 없는 정수 유형 표준 라이브러리에는 음수가 아닌 정수 연산을 처리하는 데 유용한 부호 없는 정수 API가 포함되어 있습니다. 부호 없는 정수 유형은 Kotlin 1.3 이후 베타에서 사용할 수 있었습니다. 이제 부호 없는 정수 유형과 연산을 안정적인 것으로 분류하여 별도의 선택 과정 없이 실제 프로젝트에서 안전하게 사용할 수 있습니다. 새로 도입된 안정적 API는 다음과 같습니다. 부호 없는 정수의 배열은 베타 버전에서 유지됩니다. 배열이 기본적으로 지원되는 부호 없는 정수 varargs도 마찬가지입니다. Kotlin은 이제 java.nio.file.Path의 확장 함수를 통해 Kotlin 관용 스타일에서 최신의 블록되지 않은 Java IO를 즉시 사용할 수 있는 방법을 제공합니다. 이러한 확장 기능은 Kotlin 1.4.20에서 실험적 기능으로 도입되었으며, 이제 별도의 선택 없이 사용할 수 있습니다. 사용할 수 있는 함수 목록은 kotlin.io.path 패키지를 확인하세요. File API의 기존 확장 기능은 계속 사용할 수 있으므로 즐겨 이용하는 API를 자유롭게 선택할 수 있습니다. 문자열과 문자의 대소문자를 변경하기 위한 다음 stdlib 함수는 많은 분들께 익숙할 것입니다: toUpperCase(), toLowerCase(), toTitleCase() 이러한 함수는 일반적으로 잘 작동하지만 처리하는 플랫폼 로케일에 따라 골치 아픈 문제를 일으킬 수 있습니다. 모두 로케일에 민감하여 로케일에 따라 결과가 다를 수 있기 때문입니다. 예를 들어, ”Kotlin”.toUpperCase()로 어떤 결과가 반환될까요? 여러분은 “물론 KOTLIN이죠”라고 말할 것입니다. 그러나 터키어 로케일에서 대문자 i는 İ이므로 KOTLİN이라는 다른 결과가 얻어집니다.이제 문자열과 문자의 대소문자를 변경하여 로케일의 구애를 받지 않는 새로운 API가 제공됩니다: uppercase(), lowercase(), titlecase() 확장 기능과 이에 대응하는 *Char() 이미 1.4.30의 테스트 버전에서 이 API를 사용해 보았을 수 있습니다. 새로운 함수는 플랫폼 로케일 설정에 관계없이 동일한 방식으로 작동합니다. 이들 함수를 호출하기만 하면 나머지는 stdlib이 알아서 합니다. JVM에서 현재 로케일을 인수로 사용하여 새로운 함수를 호출하면 로케일을 구분하는 대소문자 변경을 수행할 수 있습니다. 이전 함수가 새로운 함수로 완전히 대체되어 더 이상 사용되지 않습니다. 문자의 UTF-16 코드를 가져오는 연산인 toInt() 함수는 한자리 문자열에서 String.toInt()와 매우 유사하여 자주 실수를 유발하고는 했습니다. 이 경우 이 숫자가 나타내는 Int가 생성되기 때문입니다. 또한 Char '4'에 대해 숫자 값 4를 반환하는 공통 함수도 없었습니다.
이러한 함수는 명확한 이름을 가지며 코드를 더 읽기 쉽게 만듭니다. 새로운 함수는 Kotlin 1.4.30부터 테스트 버전 모드로 사용 가능했으며 이제 안정적으로 작동합니다. 문자에서 숫자로 변환(Char.toInt() 및 다른 숫자 유형에 대한 유사한 함수) 및 숫자에서 문자로 변환(Int.toChar()를 제외한 Long.toChar() 및 유사 함수) 하기 위한 이전의 함수는 이제 더 이상 사용되지 않습니다. 표준 라이브러리의 멀티 플랫폼 부분을 계속 확장하여 멀티 플랫폼 프로젝트의 공통 코드에 이러한 기능이 이용될 수 있도록 하고 있습니다. 이제 모든 플랫폼과 공통 코드에서 사용할 수 있는 여러 Char 함수가 제공됩니다. 이러한 함수는 다음과 같습니다. ▶문자가 글자 혹은 숫자인지 여부를 확인하는 Char.isDigit(), Char.isLetter(), Char.isLetterOrDigit() Unicode에 따라 문자의 일반 범주를 나타내는 Char.category 프로퍼티 및 그 반환 유형 열거형 클래스인 CharCategory를 이제 멀티플랫폼 프로젝트에서 사용할 수 있습니다. Kotlin의 String?.toBoolean() 함수는 문자열로부터 부울 값을 만드는 데 널리 사용됩니다. 작동은 매우 간단합니다. 대소문자에 관계없이 문자열 "true"에서 true이고, null을 포함한 다른 모든 문자열에서는 false입니다. 이 동작은 자연스러운 것처럼 보이지만 잠재적으로 잘못된 상황이 간과될 수 있습니다. 이 함수로 무엇을 변환하든 문자열에 예상치 못한 값이 있어도 부울이 반환됩니다. 이러한 실수를 방지하기 위해 대소문자를 구분하는 String?.toBoolean()의 새로운 엄격 한 버전이 제공됩니다. stdlib 버전 1.3.50부터 실험적으로 도입한 Duration and Time Measurement API를 사용할 수 있었습니다. 이를 통해 시간 간격을 정확하게 측정하기 위한 API가 제공됩니다. 이 API의 주요 클래스 중 하나는 Duration입니다. 이 클래스는 두 시점 사이의 시간을 나타냅니다. 1.5.0에서 Duration은 API와 내부 표현 모두에서 상당한 변경이 이루어졌습니다. Duration은 이제 Double 대신 내부 표현에 Long 값을 사용합니다. Long 값의 범위를 사용하면 나노초 정밀도로 100년 이상을, 밀리초 정밀도로 1억 년 이상을 나타낼 수 있습니다. 그러나 이전에 지원되었던 나노초 미만의 기간은 더 이상 사용할 수 없습니다. 또한 기간을 Long 값으로 검색하기 위한 새로운 프로퍼티도 도입될 예정입니다. 이러한 프로퍼티는 Duration.inWholeMinutes, Duration.inWholeSeconds 등 다양한 시간 단위로 사용할 수 있습니다. 이러한 함수는 Duration.inMinutes와 같은 Double 기반 프로퍼티를 대체합니다. 또 다른 변경 사항은 정수 값에서 Duration 인스턴스를 만드는 새로운 팩토리 함수 집합입니다. 이러한 함수는 Duration 유형에서 직접 정의되며 Int.seconds와 같은 숫자 유형의 이전 확장 프로퍼티를 대체합니다. 변경되는 부분이 많은 점을 감안하여 전체 기간 및 시간 측정 API는 1.5.0에서 실험적으로 유지되며 @ExperimentalTime 어노테이션으로 선택을 지정해야 합니다. 새 버전을 사용해보고 이슈 트래커 YouTrack에서 의견을 공유해 주세요. Kotlin에서 정수에 대한 나누기 연산자(/)는 나눗셈 결과의 소수 부분을 제거하는 '버림 나눗셈'을 수행합니다. 모듈식 산술에는 결과를 반내림하여(더 작은 정수로) 음수에 대해 다른 결과를 생성하는 대안인 '내림 나눗셈'도 있습니다. 1.5.0-RC에서는 정수에 대해 내림 나누기를 수행하는 floorDiv() 함수를 제공합니다. 1.5.0에서는 새로운 mod() 함수를 도입했습니다. 이제 이 함수가 이름에서 알 수 있듯이 내림 나누기의 나머지 부분인 나머지를 반환합니다. 이것은 Kotlin의 rem()(또는 % 연산자)와는 다릅니다. 나머지는 a와 a.floorDiv(b) * b 사이의 차이입니다. 0이 아닌 계수는 항상 b와 같은 부호를 가지며 a % b는 다른 부호를 가질 수 있습니다. 이러한 부분은 예를 들어 순환 목록을 구현할 때 유용할 수 있습니다. Kotlin 컬렉션 API는 기본 제공되는 함수를 이용해 컬렉션에서 널리 사용되는 다양한 작업을 처리합니다. 일반적이지 않은 경우에는 보통 이러한 함수 호출을 결합합니다. 작동은 하지만 항상 가볍게 처리되지는 않으며 오버헤드가 발생할 수 있습니다. 예를 들어, 컬렉션 요소에서 선택자 함수의 첫 번째 null이 아닌 결과를 가져오려면 mapNotNull() 및 first()를 호출할 수 있습니다. 1.5.0에서는 새 함수 firstNotNullOf()의 단일 호출로 이를 수행할 수 있습니다. firstNotNullOf()와 함께, 반환할 값이 없는 경우 null을 생성하는 *orNull() 대응 함수도 추가됩니다. 다음 예는 이를 통해 코드를 어떻게 단축할 수 있는지를 보여줍니다. 컬렉션을 반복하고 프로퍼티가 null이 아닌지 확인하여 이를 구현할 수 있습니다. 또 다른 방법은 기존의 mapNotNull() 및 firstOrNull() 함수를 사용하는 것입니다. mapNotNull()은 특히 큰 컬렉션의 경우에 추가 메모리가 필요한 중간 컬렉션을 빌드합니다. 그래서 여기에서 시퀀스로의 변환이 필요할 수도 있습니다. 새로운 함수에서는 다음과 같습니다. 여러 릴리스가 나오는 동안 Kotlin 테스트 라이브러리인 kotlin-test에 별다른 업데이트가 없었지만 이번에는 오랫동안 기다려온 변경 사항이 적용되었습니다. 1.5.0-RC에서는 여러 가지 새로운 기능을 시도해볼 수 있습니다. ▶멀티플랫폼 프로젝트의 단일 kotlin-test 종속성. 멀티플랫폼 프로젝트의 kotlin-test 종속성 이제 공통 테스트 소스 세트의 kotlin-test 종속성만 추가하면 됩니다. Gradle 플러그인이 다른 소스 세트에 대한 해당 플랫폼 종속성을 추론합니다. Kotlin/JVM 소스 세트에 대한 테스트 프레임워크의 자동 선택 Groovy DSL에서는 다음과 같이 나타납니다. 그리고 Kotlin DSL에서는 다음과 같습니다. 테스트 작업에서 간단히 함수를 호출하여 JUnit 5 또는 TestNG로 전환할 수도 있습니다: useJUnitPlatform() 또는 useTestNG(). kotlin-test 종속성을 추가하면 JVM 전용 프로젝트에서도 동일하게 작동합니다. 어설션 함수 업데이트 먼저, 새로운 함수를 간단히 살펴보겠습니다. 다음은 이러한 함수의 사용법을 보여주는 간단한 예입니다. 기존 어설션 함수와 관련하여 이제 assertTrue(), assertFalse() 및 expect()로 전달된 람다 표현식 내에서 일시 중지 함수를 호출할 수 있습니다. 이러한 함수는 이제 인라인 화되었기 때문입니다. 1.5.0-RC를 사용하여 이러한 모든 최신 Kotlin API를 실제 프로젝트에 적용해 보세요! IntelliJ IDEA 또는 Android Studio에서 Kotlin 플러그인 1.5.0-RC를 설치하세요. EAP 플러그인 버전을 사용하는 방법에 대해서도 알아보세요. 1.5.0-RC로 기존 프로젝트를 빌드하여 1.5.0에서 어떻게 작동하는지 확인해 보세요. 테스트 버전 릴리스를 위해 단순화된 새로운 구성을 사용하면 Kotlin 버전을 1.5.0-RC로 변경하고 필요한 경우 종속성 버전을 조정하기만 하면 됩니다. Kotlin 1.5.0-RC는 새로운 언어 기능, stdlib 업데이트, 향상된 테스트 라이브러리 등 다양한 변경 사항이 마무리 단계에 있습니다. 이번이 다음 기능 릴리스에 영향을 미칠 수 있는 마지막 기회입니다! 발견한 문제가 있으면 이슈 트래커에서 공유해 주세요. 감사합니다. 이 게시물은 Pavel Semyonov가 작성한 Kotlin 1.5.0-RC Released: Changes to the Standard and Test Libraries를 번역한 글입니다. |