이 글의 원문은 여기서 확인 가능하며, 블로그 리뷰에는 노현석(GDE)님이 참여해주셨습니다.
Google은 모든 Android 플랫폼에서 네이티브 앱을 더 빠르고 쉽게 빌드할 수 있도록 디자인된 새로운 UI 도구 키트 Jetpack Compose의 베타 릴리스를 출시했습니다. Compose는 최신 선언형 Kotlin API를 제공해 훨씬 적은 코드만으로 보기 좋은 반응형 앱을 빌드하는 데 도움이 됩니다. 기존 Android 앱과 Jetpack 라이브러리와 통합하도록 빌드되어 있어, Android Views와 Compose를 결합해 자신에게 맞는 속도로 Compose 작성을 채택할 수 있습니다.
이번 베타 릴리스가 나오면서, Compose는 API까지 완비해 프로덕션 준비가 완료된 앱을 빌드하는 데 필요한 모든 기능을 갖추게 되었습니다. 베타는 API가 안정적이라는 의미이기도 하므로, API를 변경하거나 제거하지 않을 것입니다. 바로 지금이 Compose를 배우고, 또 올해 Compose가 1.0단계 이상에 이르면 향후 프로젝트나 기능에 어떻게 활용할 지 계획을 세우기 좋은 시점입니다.
베타 버전의 내용
저희 팀은 커뮤니티의 적극적인 피드백과 참여를 통해 Compose를 개발해오고 있습니다. 2019년에 오픈소스 개발을 시작한 이후로, 30회의 공개 릴리스를 발표하고 700여 건의 외부 버그를 해결했으며 외부 기여자로부터 200여 건의 제안을 받아들였습니다. 저희 팀은 개발자 여러분이 Compose로 무엇을 빌드하고 있는지 굉장히 궁금해하고 있으며, 보내주신 의견과 기능 요청을 사용해 API를 다듬고 작업의 우선순위를 정했습니다. 알파 릴리스 이후로 다음과 같은 여러 가지 새로운 기능을 추가하고 개선했습니다.
- 🆕 코루틴 지원(Coroutines support)
- 🆕 Talkback을 위한 접근성 지원 - 다른 기술을 위한 지원은 Stable 단계로 들어설 것임(Accessibility support for Talkback - support for other technologies will be in Stable)
- 🆕 알파 릴리스 이후로 완전히 새로운 API와 함께 사용하기 쉬운 Animations.(Easy to use Animations, with a completely new API since alpha.)
- Views와의 호환성(Interoperability with Views)
- @Sampled 코드가 있는 Material UI Components(Material UI Components, all with @Sampled code)
- Lazy List - Jetpack Compose에서의 RecyclerView(Lazy Lists - Jetpack Compose's take on RecyclerView)
- DSL 기반 Constraint Layout(DSL-based Constraint Layout)
- 한정자(Modifiers)
- 테스트(Testing)
- Dark 모드와 Light 모드를 손쉽게 지원하는 Theming과 Graphics(Theming and Graphics, with easy support for Dark and Light mode)
- 입력 및 제스처(Input and gestures)
- 텍스트 및 편집 가능한 텍스트(Text and editable text)
- 창 관리(Window management)
베타 릴리스를 위해 저희 팀은 API의 완성도를 보장하는 데 주력해왔습니다. 즉, 1.0 이상에서 계속 기반으로 삼아 빌드할 수 있도록 모든 기초적 API를 마련하는 데 주안점을 두었습니다. 앞으로는 앱 성능과 접근성에 특히 초점을 맞춰 1.0 릴리스까지 이들 API의 안정화 작업을 진행할 예정입니다.
Compose Beta는 다음과 같은 많은 새로운 도구를 갖춘 최신 Canary 버전인 Android Studio Arctic Fox의 지원을 받습니다.
🆕 Live Literals: 미리보기와 실제 기기 또는 에뮬레이터에서 실시간 리터럴 업데이트
🆕 Animation Preview: 애니메이션 검사 및 재생
🆕 Layout Inspector에서 Compose 지원
🆕 Interactive Preview: 격리된 상태에서 Composable 검사 및 상호 작용
🆕 Deploy Preview: 완전한 앱을 필요로 하지 않고 기기에 Composable 배포
|
Android Emulator의 Live Literals
|
|
Jetpack Compose용 Layout Inspector |
기존 앱에서 작동
Jetpack Compose는 Android Views와 원활히 작동하도록 설계되어 있으므로, 자신의 페이스에 맞춰 채택할 수 있습니다. Compose UI를 Android Views 내에 삽입하고 Compose 내에서 Views를 사용할 수 있습니다. 팀에서는 상호 운용성 문서(interoperability documentation)에 여러 가지 채택 전략을 마련해두고 있습니다.
View 상호 운용성 외에, 공통 라이브러리와 통합하여 기존 애플리케이션에 Compose를 추가하도록 지원하며, 이때 앱을 다시 작성하거나 다시 설계할 필요는 없습니다. 다음과의 통합 기능을 제공합니다.
- Navigation
- ViewModel
- LiveData/Rx/Flow
- Paging
- Hilt
MDC-Android Compose Theme Adapter 및 Accompanist 라이브러리는 Material 및 AppCompat XML 테마와의 통합을 제공하므로, 테마 정의(theme definitions)를 복제할 필요가 없습니다. Accompanist는 공통 이미지 로딩 라이브러리(image loading libraries)를 위한 래퍼(wrappers)도 제공합니다.
Compose 방식으로 생각하기
Jetpack Compose는 선언형 UI 도구 키트로, 주어진 애플리케이션 상태에 대해 UI를 어떻게 만들 것인가가 아니라, UI가 어떤 모습이어야 할지 설명한다는 점에서, 현재의 View 시스템에서 패러다임의 전환이 이루어진 도구 키트입니다. UI를 원하는 상태로 조작하는 것은 지루하고 오류 발생 가능성도 많을 수 있는 일인데, 앱 상태가 바뀔 때 Compose가 UI 업데이트를 처리해주므로 이처럼 UI를 조작할 필요가 없습니다.
전적으로 Kotlin으로 빌드된 Compose는 Kotlin의 훌륭한 언어 기능(launguage features)을 이용해 강력하면서도 간결하고 직관적인 API를 제공합니다. 예를 들어 코루틴(Coroutines)을 사용하면 제스처(gestures), 애니메이션(animation) 또는 스크롤(scrolling)과 같이 훨씬 더 간단한 비동기 API를 작성할 수 있습니다. 따라서 애니메이션으로 전달하는 제스처와 같은 비동기 이벤트를 전부 구조화된 동시성(structured concurrency)에 의해 제공되는 취소 및 정리와 결합하는 코드를 작성하기가 더 쉬워졌습니다.
Compose 학습
개발자 여러분께서 Jetpack Compose을 좀 더 수월하게 시작할 수 있도록 관련 영상, 실습 코드랩, 주요 문서를 정리하여 학습 경로를 업데이트했습니다. Compose를 사용해 빌드하는 방법을 더욱 자세히 알아보실 수 있도록 신규 및 업데이트된 문서 가이드, 다양한 스크린캐스트(screencasts), 새로운 Animation Codelab을 발표합니다. 아키텍처(architecture), 접근성(accessibility), 테스트(testing)에 관한 지침부터 애니메이션, 목록 또는 Compose 방식으로 생각하기에 관해 심화된 내용까지, 빠르게 배우는 데 도움이 되는 가이드를 마련해두고 있습니다.
Compose가 실제로 사용되는 사례를 바로 확인하고 싶으신 분들을 위해 8가지의 공식 샘플 애플리케이션도 제공해 드립니다. 간단한 것부터 복잡한 것까지, 제각기 다른 API와 사용 사례를 샘플을 통해 살펴보실 수 있습니다. 더 자세한 내용은 readme를 읽어보세요.