Google Home, 비정상 종료의 #1 원인 33% 절감

Google Home 앱을 사용하면 Google Home, Google Nest, Chromecast 기기뿐만 아니라 조명, 카메라, 온도 조절기 등 수천 개의 Connected Home 제품을 설정, 관리 및 제어할 수 있습니다.

Google Home 앱의 지원을 받는 엔지니어링 팀은 Kotlin 및 Android Jetpack 라이브러리를 사용하여 엔지니어링 생산성 및 개발자 만족도 향상이라는 이점을 누릴 수 있습니다.

무엇을 했나

Google Home 팀에서는 프로그래밍의 생산성을 향상하고 var/val, 스마트 변환, 코루틴 등과 같은 최신 언어 기능을 사용할 수 있도록 Kotlin을 코드베이스에 통합하기로 결정했습니다. 2020년 6월 현재, 코드베이스의 약 30%가 Kotlin으로 작성되었으며 모든 새로운 기능에 대해 Kotlin 개발이 권장됩니다.

또한 팀은 개발자의 속도를 개선하고 상용구 코드 유지관리의 필요성을 줄이며 필요한 코드 양을 축소하기 위해 Jetpack 라이브러리를 채택했습니다. Jetpack 라이브러리를 사용하면 기능 경계 및 API가 더 명확해지므로 더 쉽게 코드를 테스트할 수 있습니다.

결과

"효율성과 더 많은 작업을 수행하는 코드를 적게 작성하는 것이 바로 Kotlin을 사용하여 달성할 수 있는 '속도' 향상입니다." - 재러드 버로스, Google Home 소프트웨어 엔지니어

Kotlin으로 전환하면 기존 자바 코드에 비해 필요한 코드의 양이 줄어듭니다. 한 가지 예는 데이터 클래스 및 Parcelize 플러그인을 사용하는 것입니다. 자바에서는 개발자가 126행으로 직접 작성했을 클래스를 이제 Kotlin에서는 단 23행으로 표현할 수 있어 코드 양이 80% 줄어듭니다. 또한 equality 및 parcelize 메서드가 자동으로 생성되고 최신 상태로 유지됩니다. Kotlin에서 제공되는 함수형 메서드를 사용하여 많은 중첩 루프 및 필터링 검사도 단순화되었습니다.

Kotlin은 null 허용 여부를 언어의 일부로 만들 수 있으므로 자바에서 null 허용 여부 주석을 일관되지 않게 사용하여 버그를 놓치는 것과 같은 까다로운 상황을 피할 수 있습니다. Kotlin을 구현함으로써 Google Home 앱 팀의 NullPointerException이 33%까지 감소했습니다. 이는 Google Play Console에서 가장 일반적인 비정상 종료 유형이므로 이를 줄임으로써 사용자 환경이 크게 향상되었습니다.

100만 행이 넘는 코드가 있는 Google Home과 같은 대규모의 완성된 앱을 사용하면 Jetpack 라이브러리를 점진적으로 추가하는 것이 유용합니다. 이들을 통합함으로써 팀은 맞춤형 솔루션을 통합하고 때로 단일 라이브러리로도 대체할 수 있었습니다. Jetpack 라이브러리는 엔지니어가 권장사항을 따르는 데 도움이 되며 덜 장황할 수 있으므로(예: Room 또는 ConstraintLayout 사용) 가독성도 향상되었습니다. 팀은 Google Home 코드베이스에서 광범위하게 사용되는 ViewModelLiveData를 비롯한 많은 최신 Jetpack 라이브러리를 '필수 요소'로 간주합니다.

Google Home 앱 팀은 Jetpack KTX와 Kotlin 코루틴의 통합이 특히 유용하다는 사실을 알아냈습니다. 이제 팀은 코루틴을 ViewModel과 같은 수명 주기 인식 구성요소와 연결하여 까다로운 비동기 프로그래밍 버그를 피할 수 있습니다.

시작하기

Kotlin으로 Android 앱 작성Android Jetpack 라이브러리 사용에 관해 자세히 알아보세요.