본문 바로가기
Kotlin/Release Notes

[Kotlin Release Notes] M7 Release Available

by 노력남자 2023. 8. 28.
반응형

2014년 3월 20일

 

Kotlin M7이 도착했고, 그와 함께 오랫동안 기다려온 몇 가지 기능들이 있습니다.


컴파일러와 언어 변경 사항


인라인 지원


M7의 가장 큰 특징 중 하나는 인라인 함수를 지원하는 것입니다. Kotlin은 람다 표현식을 널리 사용하는 고차 함수(일부 사람들은 이를 "함수형 스타일"이라고 부릅니다)의 사용을 장려합니다. M7부터는 고차 함수를 "인라인"으로 선언할 수 있으며, 이는 그 함수의 본문이 호출 지점과 전달된 모든 람다와 함께 인라인됨을 의미합니다. 이는 이러한 함수를 사용할 때 성능 저하가 거의 없음을 의미합니다. 예를 들어, for 루프 대신 forEach를 사용하고 람다를 전달하는 것은 속도 면에서 거의 차이가 없을 것입니다.

 

인라이닝은 생성된 클래스 수, 바이트코드 크기, 더 적은 할당, 더 적은 메가모픽 호출 등과 같은 성능 향상에 기여하는 여러 가지 이점을 제공합니다.

Kotlin의 표준 라이브러리의 많은 함수들이 이제 인라인됩니다.

참고: 만약 인라이닝이 코드를 깨뜨린다면(예를 들어, 컴파일러 버그 때문에), 컴파일러에 -inline off 명령 줄 옵션을 전달하여 이를 끌 수 있습니다(Preferences -> Compiler -> Kotlin Compiler 참조).

 

 

toString(), equals(), hashCode()에는 override 지시어가 필요합니다.


toString(), equals(), hashCode()를 선언할 때 이제는 그 앞에 override 키워드를 붙여야 합니다. 이는 이전 릴리스에서의 변경 사항이며 모든 클래스에 적용됩니다. IDE에서 제공하는 빠른 수정(오류에서 Alt+Enter)을 사용하여 프로젝트의 모든 해당 메서드에 "override"를 빠르게 추가하세요.

 

"jet" 패키지는 "kotlin"으로 이름이 변경되었습니다.


jet 코어 클래스의 이름이 kotlin으로 변경되었으며, 이는 네, 맞습니다, Kotlin이 이제 공식적이고 최종적인 이름이 되었다는 것을 의미합니다. 이는 또한 잠재적으로 코드를 깨뜨릴 수 있는 변경 사항입니다. 대부분의 import는 자동으로 이루어집니다. 문제가 발생할 경우 import를 수동으로 이름을 변경하세요.

 

로컬 함수에 대한 참조


Kotlin에서는 ::functionName 문법을 사용하여 함수를 이름으로 참조할 수 있습니다. 이제 로컬 함수에 대해서도 이것이 가능합니다.

 

fun foo() {

    fun bar() {

    }

    fun biz(func: () -> Unit) {

    }

    biz(::bar)
}

 

상호 운용성


[throws] 애너테이션


이제 함수에 throws 애너테이션을 붙여 JVM으로 컴파일될 때 함수에 의해 선언되어야 할 예외를 지정할 수 있습니다.

 

[throws(javaClass<SocketException>()]
fun connect(host: String) { 
...
}

 

은 자바에서 다음과 같이 번역됩니다.

 

void connect(String host) throws SocketException { 
...
}

 

자바스크립트 향상 사항


이제 오버로딩된 함수를 제공하고 자바스크립트로 컴파일할 수 있습니다. Kotlin은 _1, _2 등의 접미사를 가진 새 함수를 생성합니다.

 

foo: function () {
},
foo_1: function (param) {
},
foo_2: function (param, anotherParam) {
}

 

또한, 자바스크립트 네이티브 함수는 이제 확장 리터럴을 매개변수로 전달할 수도 있습니다.

 

표준 라이브러리


표준 라이브러리는 대폭 재구성되고 있습니다. 이에는 스트림의 도입(이것은 Java 8과의 더 나은 호환성을 제공하기 위한 것 중 하나입니다) 및 일부 함수의 폐기가 포함됩니다.

일부 재설계로 인해 라이브러리 API에 대한 중단 변경이 발생했습니다. 대부분의 기능은 여전히 사용 가능하지만, 기존 코드를 약간 수정해야 할 수 있습니다.


IntelliJ IDEA 향상 사항


복사/붙여넣기 이제는 import를 삽입합니다.


코드를 한 파일에서 다른 파일로 복사하고 붙여넣을 때, IntelliJ IDEA는 이제 필요한 패키지를 자동으로 import합니다.


Find Usages 개선


Find Usages는 이제 로컬 클래스도 커버합니다. 또한 이제 오버라이드와 이러한 것의 계층적인 뷰도 볼 수 있습니다.


Smart Completion


코드 완성에서 enum, Java의 정적 멤버, 그리고 익명 객체에 대한 지원이 향상되었습니다.

 


리팩토링 지원


로컬 변수와 같은 특정 이름 변경 리팩토링은 이제 대화 상자를 사용하지 않고 현장에서 수행할 수 있습니다.

 


Safe Delete


Safe Delete 리팩토링을 사용하여 프로젝트 전체에서 사용되지 않는 심볼을 안전하게 삭제할 수 있습니다.


패키지 이름 변경


패키지 이름 변경 및 모든 import의 해당 업데이트가 이제 지원됩니다.

 


Java의 Move 리팩토링과의 통합


Java 코드의 Move 리팩토링을 수행할 때 이제 Kotlin 코드에서의 해당 사용법을 업데이트합니다.


의도


이 릴리스는 또한 IntelliJ IDEA에 일련의 의도(Intentions)를 가져옵니다. 이에는 다음이 포함됩니다:

 

엘비스 연산자를 If 조건문으로 대체

 

안전한 접근 연산자 또는 엘비스 연산자는 이제 의도를 단순히 사용함으로써 필요한 경우 더 명확한 if 조건문으로 대체될 수 있습니다.

 


Infix 호출을 dot qualified 호출로 변환


Infix 호출은 dot qualified 호출로 변환될 수 있습니다.

 


식 본문으로 변환


단순한 return 문을 가진 함수를 식으로 변환할 수 있는 기능입니다.

 


문자열 템플릿에서 단순 변수 이름의 괄호 추가 및 제거

 

문자열 템플릿에서 변수 이름이 있을 때, 쉽게 중괄호를 추가하거나 제거할 수 있습니다.

 

 

  • 위에 언급된 것 외에도 다음과 같은 것이 있습니다:
  • IntelliJ IDEA 13.1 및 Android Studio 지원
  • 지연 분석을 통한 성능 향상, 이로 인해 Java와의 상호 운용성 속도도 향상됩니다.
  • Java2Kotlin Converter에서의 개선, 더 깔끔한 코드와 더 나은 복사/붙여넣기 동작을 포함합니다.
  • 코드 포맷터에서의 개선

 

기타 개선 사항


추가로, 몇 가지 다른 버그 수정과 기능이 있습니다.

 

  • 향상된 제어 흐름 분석으로 일부 기존 버그가 수정되었습니다.
  • 부트스트래핑이 더 많아졌습니다. 우리는 Kotlin 내에서 점점 더 많은 Kotlin을 사용하고 있습니다.
  • Kotlin 표준 라이브러리에 대한 몇 가지 추가 개선 사항이 있습니다.

 

GitHub의 릴리스 페이지에서 컴파일러와 플러그인을 찾을 수 있습니다.

 

IntelliJ IDEA를 사용하고 있다면, 우리의 저장소에서 최신 플러그인을 다운로드하거나 IntelliJ IDEA의 플러그인을 통해 직접 업데이트할 수 있습니다. Kotlin M7은 IntelliJ IDEA 13.1이 필요합니다.

 

원문

 

https://blog.jetbrains.com/kotlin/2014/03/m7-release-available/

반응형

댓글