[요약] State of Kotlin on Android (Google I/O '21)

[요약] State of Kotlin on Android (Google I/O '21)

May 24, 2021. | By: pluulove


Kotlin Momentum

  • Google Play 설치 수 기준 상위 1,000개 앱 중에서 80%에 Kotlin이 사용되고 있다
  • Android 개발자의 60%가 Kotlin을 사용 중이다

  • 작년 수천 명의 개발자가 Android Kotlin 교육 과정과 코드랩을 수료했다

  • Google 자체 앱에도 Kotlin을 사용하기 시작했다
  • 현재 공개된 앱 중 70개 이상에서 사용 중이다

  • 동시성을 유지하기 위해 Kotlin으로 작성된 Android 및 서버 앱에 Coroutine을 도입했다
  • Google Mono Repo에서 Kotlin 코드가 급격히 늘어나고 있다

Kotlin의 장점

  • 프로퍼티, Extension 등의 풍부한 표현력
  • Null 허용 및 문자열 템플릿으로 안전성 강화
  • Coroutine으로 기존 코드와의 상호운용성과 구조적 동시성을 쉽게 지원

  • Goolge Play에서 Kotlin을 도입한 앱의 Crash를 경험한 사용자 수가 10% 감소했다

  • Kotlin Google Developer Experts 프로그램을 시작했다

Tools updates

  • Kotlin으로 Gradle Build 파일 스크립트를 작성할 수 있다
  • 빌드 파일에서 Kotlin의 장점을 누릴 수 있다.
  • 새로운 Android Gradle Plugin인 Kotlin DSL에서 지원한다
  • 최근 새로운 DSL 관련 문서를 추가했다.

  • Kotlin과 Gradle 상호작용이 개선되었다
  • KAPT에서 증분 지원
  • Gradle 구성 캐싱을 적용

  • 빌드 시간 단축과 표현력을 개선하기 위한 도구로 KSP가 있다
  • KSP의 목표는 기호 처리를 Kotlin 에코 시스템의 1급 기능으로 만드는 것이다
  • KAPT로 Java Stub를 생성하기 위해 긴 시간을 보낼 필요가 없다
  • KSP는 Kotlin Compiler와 함께 생성되고, 모든 Kotlin 기호에 액세스를 제공한다
  • Jetpack Room 라이브러리에서 베타로 KSP를 지원한다
    • KAPT 대비 처리 속도가 두 배 빨라졌다

  • Kotlin 1.5에서 대규모 프로젝트에 영향을 미치는 성능 문제를 다수 해결
  • auto-import suggestion 처리 속도는 20배까지 빨라졌다
  • 복잡한 종속성 그래프가 있는 프로젝트의 code completion 속도는 2배 빨라졌다

  • 위 그림은 일반적인 Kotlin Compiler 파이프라인이다
  • Compiler는 Frontend와 Backend로 나뉜다
  • Frontend는 코드가 맞는지 확인, Backend는 코드 생성을 담당한다

  • Kotlin 1.5에서 출시된 새로운 JVM IR Backend Compiler로 다시 개발 중이다
  • 다양한 Compiler Plugin API가 제공된다. 이 API를 이용해 Jetpack Compose Language Extension을 지원한다

  • 새로운 Backend 사용으로 JVM, JS, Native의 Compiler Frontend를 통합할 수 있다

Libraries and APIs

  • 현재 KTX는 다양한 Jetpack API를 지원하는 수십 개의 Artifact로 늘어났다
  • Kotlin으로 새 라이브러리도 개발함으로 Coroutine/Flow 등의 기능을 사용할 수 있다

  • AndroidX뿐만 아니라 다양한 곳에서 SDK 용 확장 프로그램이 출시되었다

  • Kotlin으로 개발한 라이브러리도 있다 (예 : Kotlin gRPC)
  • Protobuf를 위한 새로운 Kotlin binding이 출시했으며 Protobuf와 호환되는 Kotlin DSL을 제공한다

  • Kotlin Coroutine이 Android에서 Kotlin 사용 시 비동기 작업의 권장 방식으로 지정되었다
  • StateFlow, SharedFlow가 Coroutine 라이브러리에 추가되었다

  • LiveData는 UI에서 편리하게 상태 업데이트를 관찰하는 수단이며 Java 언어 사용자는 이 방식을 사용한다.
  • Kotlin에서는 StateFlow가 같은 기능을 할 수 있다. Android Studio 최신 버전에서는 Binding에서 StateFlow의 직접 관찰을 지원한다.

  • DataBinding 없이 UI Flow를 관찰하고 싶다면 AndroidX Lifecycle KTX 라이브러리를 사용하면 된다.
  • launchWhenStarted 등의 함수는 다른 정지 동작 패턴이 있어서 UI가 활성 상태가 아닐 때 리소스가 낭비될 우려가 있다
  • UI에서 안전하게 Flow를 관찰할 수 있는 새로운 함수를 추가하고 있다. 새로운 함수는 작업을 자동 취소 및 다시 시작할 수 있다

  • IntelliJ IDEA의 Coroutines Debugger를 Android에도 출시했다. 향후 Android Studio 버전에 지원될 예정이다
  • 활성화된 Dispatch와 Coroutine의 정보를 확인할 수 있다
  • UI에서의 실행, 일시정지나 파일로 Dumping과 같은 Coroutine 상태도 검사할 수 있다

  • Kotlin Android Extension 플러그인을 단계별로 지원하고 있다.
  • Android Views에서 Kotlin synthetics를 사용할 때 지원되었다. 권장하는 마이그레이션은 Android ViewBinding이다.
  • parcelize 기능은 별도의 플러그인(kotlin-parcelize)으로 옮겨졌다

Morden language features

모든 Android 플랫폼 API는 Java 프로그래밍 언어로 개발되고 Kotlin/Java 개발자 모두가 사용한다

  • Java 언어에서도 Kotlin과 비슷한 개선 사항이 적용되고 있다.
  • Record는 Kotlin의 Data classes와 비슷하다

Java 언어의 개선으로 시작한 프로젝트로는

  • Android Gradle Plugin 7에 추가 언어 기능을 지원하기 시작했다
  • Android 12에 새로운 Java 언어 API를 추가한다

라이브러리 desugar 기능으로 오래된 기기에도 API를 제공한다

Android Runtime(ART)이 Android 12부터 업데이트 가능한 Mainline 모듈이 된다. 즉, 지원되는 언어 기능을 업데이트할 수 있으며 향후 Android 기기에 직접 새 API를 추가할 수 있다. OS 업데이트를 기다리지 않아도 된다

comments powered by Disqus

Currnte Pages Tags

Android

About

Pluu, Android Developer Blog Site

이전 블로그 링크 :네이버 블로그

Using Theme : SOLID SOLID Github

Social Links