일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- pandas
- Compose
- AWS
- Gradle
- Coroutine
- boj
- TEST
- activity
- 암호학
- Rxjava
- 백준
- ProGuard
- 코드포스
- 쿠링
- Python
- livedata
- 프로그래머스
- android
- Codeforces
- architecture
- 코루틴
- Hilt
- Coroutines
- MyVoca
- Kotlin
- relay
- MiTweet
- GitHub
- textfield
- androidStudio
- Today
- Total
이동식 저장소
Kotlin 2.0.0 출시 본문
Kotlin K2 컴파일러가 드디어 stable 출시되었다! 주요 변경점들을 하나씩 알아보자.
Kotlin 2.0.0 변경점
그 외의 변경점 중 재밌어 보이는 것들을 정리해 보았다.
What's new in Kotlin 2.0.0 | Kotlin
kotlinlang.org
Smart cast 확대
Smart cast는 비교문 등에 의해 변수가 자동으로 형변환되는 것을 말한다. 예를 들어 if 조건문에서 어떤 변수가 null이 아니라는 것을 확인했다면, if문 안에서는 해당 변수가 non-null로 간주된다.
Kotlin 2.0에서는 이것이 확대되어, 컴파일러가 비교문을 통해 변수의 타입을 자동으로 추출하는 등 고급 smart cast 기능을 제공한다.
class Cat {
fun purr() {
println("Purr purr")
}
}
fun petAnimal(animal: Any) {
val isCat = animal is Cat
if (isCat) {
// animal이 자동으로 Cat 타입으로 인식됨
// 2.0 이전에는 Any 타입으로 인식되었음
animal.purr()
}
}
Kotlin Power-assert 플러그인
Kotlin 2.0에 Power-assert 플러그인이 추가되었다. 아직 experimental 단계이긴 하지만, 테스트 메시지에 더 자세한 정보를 보여주는 플러그인이라고 한다. 특히 테스트가 실패했을 때 assert에 사용된 중간 값들을 더 자세히 보여줌으로서 테스트가 실패한 이유를 빠르게 이해할 수 있도록 돕는다.
다음과 같은 테스트 코드가 있다고 하자.
@Test
fun testFunction() {
val hello = "Hello"
val world = "world!"
assert(hello.length == world.substring(1, 4).length) { "Incorrect length" }
}
Power-assert 플러그인을 활성화한 후 테스트를 돌리면, 다음과 같은 에러 메시지가 출력된다.
Incorrect length
assert(hello.length == world.substring(1, 4).length) { "Incorrect length" }
| | | | | |
| | | | | 3
| | | | orl
| | | world!
| | false
| 5
Hello
이건 좀 많이 좋은데?
주의할 점은, Assert 구문 내의 변수를 별도로 선언하면 몇몇 정보가 보이지 않을 수 있다.
@Test
fun testComplexAssertion() {
val person = Person("Alice", 10)
val isValidName = person.name.startsWith("A") && person.name.length > 3
val isValidAge = person.age in 21..28
assert(isValidName && isValidAge)
}
Assertion failed
assert(isValidName && isValidAge)
| |
| false
true
확인하고자 하는 값을 assert문에 직접 작성해야 더 자세한 메시지를 볼 수 있다.
@Test
fun testComplexAssertion() {
val person = Person("Alice", 10)
assert(person.name.startsWith("A") && person.name.length > 3 && person.age > 20 && person.age < 29)
}
Assertion failed
assert(person.name.startsWith("A") && person.name.length > 3 && person.age > 20 && person.age < 29)
| | | | | | | | | |
| | | | | | | | | false
| | | | | | | | 10
| | | | | | | Person(name=Alice, age=10)
| | | | | | true
| | | | | 5
| | | | Alice
| | | Person(name=Alice, age=10)
| | true
| Alice
Person(name=Alice, age=10)
``assert`` 함수 외에도 ``require()``, ``assertTrue()`` 등 마지막 매개변수가 ``String`` 또는 ``() -> String`` 타입인 모든 함수에 적용될 수 있다.
@Test
fun testRequireFunction() {
val value = ""
require(value.isNotEmpty()) { "Value should not be empty" }
}
Value should not be empty
require(value.isNotEmpty()) { "Value should not be empty" }
| |
| false
자세한 정보는 이 글에서 확인할 수 있다.
Power-assert compiler plugin | Kotlin
kotlinlang.org
Android에 Kotlin 2.0.0 적용하기
는 이 글을 참고하면 좋다. 쿠링 팀원분께서 작성하신 글이다. 👍👍
Kotlin 2.0으로 마이그레이션하기
Kotlin 2.0 마이그레이션 가보자고 🚀
medium.com
Compose 컴파일러 버전 통일
안드로이드 개발자로서 가장 크게 느껴지는 변경점은, Compose 컴파일러가 Kotlin 컴파일러에 통합됐다는 점. 이전까지는 Compose 컴파일러와 Kotlin 버전이 서로 달랐고, 호환되는 Kotlin 버전 외에는 사용할 수 없어서 두 버전을 반드시 동일하게 맞춰야 하는 귀찮음이 있었다.
그러나 이제는 ``Kotlin 버전 = Compose 컴파일러 버전``이므로 귀찮게 버전을 맞추지 않아도 된다.
실제 적용
블린더에 Kotlin 2.0.0을 적용하고, 1.9.23 버전과의 컴파일 속도 차이를 비교해 보았다.
- 1.9.23: 146초
- 2.0.0: 140초
- 2.0.0(kapt에 2.0 적용): 75초
kapt가 Kotlin 2.0을 사용하도록 수정했더니 빌드 속도가 거의 반토막났다. 좋은데?
다들 2.0 한번 잡숴보시길 바란다. try try
'Primary > Kotlin' 카테고리의 다른 글
Sealed class vs. enum class (0) | 2024.06.14 |
---|---|
kapt를 KSP로 migrate하기 (0) | 2024.06.08 |
mutableMapOf()의 내부 구현 (0) | 2024.02.03 |
[Kotlin] Coroutines Job (0) | 2022.11.10 |
[Kotlin] Dispatcher (0) | 2022.11.08 |