본문 바로가기
Kotlin/Release Notes

[Kotlin Release Notes] Kotlin 1.0 Beta 3 is Out!

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

2015년 12월 7일

 

코틀린 1.0 베타의 또 다른 업데이트를 소개해드리게 되어 기쁩니다. 우리는 표준 라이브러리를 최종적으로 완성하고 언어 내의 오래된 폐기된 구조를 제거하며 버그 수정, 성능 개선 및 미래 지향적인 검사를 진행하고 있습니다.

변경 사항의 전체 목록은 여기에서 확인하실 수 있습니다.
닫힌 이슈는 여기에서 확인하실 수 있습니다.

 

라이브러리 변경 사항


1.0 버전 이전에 표준 라이브러리를 최상태로 만들기 위해 노력하고 있습니다. 이에 실험이 일부 포함되므로 새로운 폐기 설정이 이루어지고 새로운 함수가 추가됩니다. 표준 라이브러리의 최종 정리는 1.0 빌드(또는 RC)에서 이루어질 예정입니다. 모든 폐기 및 기타 레거시 사항을 제거할 것입니다.

여기에서 변경 사항 중 하나의 하이라이트만 소개하겠습니다: contains()와 같은 다른 확장 함수는 이제 컬렉션의 원소의 슈퍼타입을 허용합니다.

 

// strs: Collection<String>
// ns: String?
// cs: CharSequence
// i: Int
strs.contains(ns) // 이제 허용됨
strs.contains(cs) // 이제 허용됨
str.contains(i) // 오류 (사실 경고가 뜨지만 곧 오류가 될 것입니다)

 

이전에 제안되었던 containsRaw 접근 방식은 비효율적이라는 것을 발견했고, 초기에 의도한 안전성을 유지하면서 contains()를 조금 더 관용적으로 변경하기로 결정했습니다. 컬렉션 인터페이스 자체는 온전하며, 이 모든 변경은 확장 함수를 통해서만 이루어집니다. 코드 정리를 사용하여 코드를 마이그레이션하세요.

 

언어 변경 사항


언어 변경 사항 중 하이라이트 몇 가지를 소개하겠습니다. 전체 목록은 여기에서 확인하실 수 있습니다.
이전에 폐기한 많은 내용이 이제 오류가 되었습니다. 코드 정리를 사용하여 마이그레이션하세요.

 

when 표현식


이러한 유형의 코드가 문제가 되었기 때문에 이를 폐기하기로 결정했습니다:

 

when {
    foo.isValid(), foo.isReady() -> process(foo)
    ...
}

 

많은 사람들이 조건 "foo.isValid(), foo.isReady()"이 foo가 유효하고 준비되어 있다는 것을 의미한다고 생각하지만, 실제로 쉼표는 또는을 의미합니다. 해결책은 간단합니다. || 대신에 사용하십시오:

when {
	foo.isValid() || foo.isReady() -> process(foo)
	...
}

 

코드 정리가 이를 자동으로 마이그레이션해줄 것입니다.

 

주석


주석 매개변수의 기본값으로 배열을 사용하는 것을 방지하던 버그가 수정되었습니다:

 

annotation class Entry(val value: String)

annotation class Example(
	val entries: Array<Entry> = arrayOf(Entry("a"), Entry("b")) // 이제 정상적으로 사용 가능
)

 

Enum.values()


최근에 우리는 전통적인 자바의 Enum.values()를 속성으로 변경했습니다: Enum.values, 그러나 이 변경을 롤백하기로 결정했습니다. 왜냐하면 열거형의 상수는 values로 이름이 지정될 수 있으며, 그 중 하나에 액세스할 방법이 없기 때문입니다. 여러 가지 옵션을 고려한 결과, values를 다시 함수로 변경하는 것이 가장 깨끗한 방법이라고 결정했습니다.

따라서 values 속성은 이제 폐기되었고, values() 함수는 다시 폐기되지 않았습니다.

 

가시성 및 스코핑 규칙


가시성 및 스코핑 규칙에서 작은 문제를 정리하고 수정하고 있습니다.

- 컴패니언 객체 내에서 protected 멤버가 허용됩니다.

 

- 서브클래스에서 @JvmStatic이 아닌 protected 멤버를 호출하면 오류로 표시됩니다 (지원되지 않음).

 

- 열린 프로퍼티에 대한 private setter는 이제 폐기되었습니다.

 

- 로컬 sealed 클래스는 폐기되었습니다 (사용할 수 없었음).

 

- 오버라이딩된 setter는 가시성을 약화할 수 없습니다.

 

- 열거형 항목 내부에서 내부 클래스는 더 이상 허용되지 않습니다.

 

- 람다 / 객체 리터럴 / 로컬 함수 내에서 초기화되지 않은 변수의 사용이 금지되었습니다.


안드로이드 익스텐션


인텔리제이 IDEA용 주요 코틀린 플러그인과 안드로이드용 코틀린 익스텐션 플러그인이 통합되었습니다. 후자의 기능은 이제 주요 코틀린 플러그인에서 사용 가능합니다.

 

또한 안드로이드 제품 플레이버를 지원하도록 추가되었습니다: 이제 다른 플레이버의 속성이 다른 패키지에서 사용 가능합니다.

예를 들어, build.gradle 파일에 두 개의 플레이버가 있다고 가정해보겠습니다:

 

productFlavors {
    free {
        versionName "1.0-free"
    }
    pro {
        versionName "1.0-pro"
    }
}

 

이제 메인 소스 세트의 레이아웃 뿐만 아니라 플레이버 레이아웃에 대한 합성 속성을 사용할 수 있습니다:

 

// free 플레이버의 activity_free.xml 레이아웃에 대한 합성 속성 가져오기
import kotlinx.android.synthetic.free.activity_free.versionMarker
class FreeActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        ...
        setContentView(R.layout.activity_free)
        ...
        versionMarker.text = "Free version"
    }
}

 

주의할 점은 메인 소스 세트의 모든 레이아웃이 이제 kotlinx.android.synthetic.main 패키지 아래에 위치하며, 이전의 패키지 명명 규칙은 폐기되었다는 점입니다.

 

IDE의 새로운 기능


- 안드로이드 익스텐션 플러그인이 주요 코틀린 플러그인으로 통합되어 별도로 설치할 필요가 없어졌습니다.

 

- 새로운 Gradle 프로젝트를 생성할 때 코틀린을 선택할 수 있는 옵션이 추가되었습니다.

 


- 디버거: 인라인 함수의 스택 트레이스 내에서 스택 프레임을 탐색하는 기능이 추가되었습니다. 또한 인라인 함수를 통해 단계별로 진행하는데 여러 개의 개선 사항이 있었습니다.

 

- 세 가지 새로운 속성 초기화 퀵 패치가 추가되었습니다.

 


- 변수 소개 (Ctrl+Alt+V / Cmd+Alt+V)는 이제 다중 선언 식을 지원합니다:

 


또한 람다나 익명 함수 내의 표현식에 대해 컨테이너를 선택할 수 있습니다:

 


Beta 3에서는 문자열 템플릿 조각에서 변수/매개변수/프로퍼티/함수 소개 기능을 지원하게 되었습니다.

 


마지막으로, 기본적인 코틀린 스크립트 파일 (.kts)에 대한 기본 지원이 추가되었습니다.

 

원문

 

https://blog.jetbrains.com/kotlin/2015/12/kotlin-1-0-beta-3-is-out/

반응형

댓글