Compose 를 왜 사용해야하는가?
드디어 올 것이 왔구나
시간이 갈수록 자격 요건 or 우대 사항으로 Compose 를 요구하고 있다.
컴포즈..필수로 해야하는가?
고민하다가 왜 컴포즈를 사용해야하는지 정리해보기로 했다.
XML 의 문제점
지금까지 Android View 계층 구조는 UI 위젯의 트리로 표시할 수 있었다.
앱의 상태가 변경되면 현재 데이터를 표시하기 위해 UI 계층 구조를 업데이트 해야했다.
가장 일반적인 방법은 findViewById() 로 트리를 탐색하고 button.setText(String), 과 같은 메서드를 호출하여 노드를 변경하는 것이다.
그러나 뷰를 수동으로 조작하면 오류가 발생할 가능성이 커진다.
데이터를 여러 위치에서 렌더링한다면 데이터를 표시하는 부분이 예기치 않은 방식으로 동작할 가능성이 있다.
업데이트가 필요한 뷰의 수가 많을수록 유지관리 복잡성이 증가한다.
XML 로 작성한 View 시스템 UI 는 디버깅이 힘들었다.
View 트리 구조는 성능 문제도 존재하며 유연하지않고 재사용성이 떨어진다.
컴포즈를 채택해야하는 이유
https://developer.android.com/jetpack/compose/why-adopt?hl=ko
Jetpack Compose 는 Android UI 를 빌드하기 위한 Android 의 최신 툴킷이다.
더 적은 수의 코드, 직관적인 kotlin API 로 Android 에서의 UI 개발을 간소화하고 가속화한다. 더 빠르고 쉽게 빌드할 수 있다.
Compose 는 선언형 UI 프레임워크로 화면 전체를 재생성하는 비용을 줄이기 위해 특정 시점에 어떤 부분을 다시 그려야하는지 지능적으로 선택한다. 이를 Recomposition (재구성)이라고 한다.
코드 감소
Compose 를 사용하면 View 시스템을 사용할 때 보다 더 적은 코드로 작업할 수 있다.
버튼, 목록 또는 애니메이션에 있어 무엇을 빌드해야 하든 코드는 조금만 작성하면 된다.
작성하는 코드를 kotlin XML 로 나누지 않고 kotlin 으로만 작성해 같은 언어로 작성하기 때문에 코드를 추적하기 쉬워진다.
Compose 의 레이아웃 시스템은 개념적으로 더 단순해 추론하기도 쉽다. 복잡한 구성요소의 코드도 쉽게 읽을 수 있다.
직관적
Compose 는 선언적 API 를 사용한다. 직관적이므로 찾아서 사용하기가 쉽다.
theme layer가 훨씬 더 직관적이고 읽기 쉽다. 여러 XML 파일로 확장해야 했을 일을 단일한 Kotlin 파일 내에서 작성할 수 있다.
특정 Activity 나 Fragment 에 종속되지 않는 작은 Stateless 구성 요소를 빌드한다.
재사용하고 테스트하기 쉬워지며 사용 및 유지관리가 쉽다.
상태가 명시적이며 Composable 로 전달된다. 이는 상태에 관한 정보 출처가 하나이므로 캡슐화되고 분리된다. 그럼 앱 상태가 변경되었을 때 UI 가 자동으로 업데이트된다.
빠른 개발 과정
Compose 에서 View 를, View 에서 Compose 를 호출할 수 있다. Navigation, ViewModel, Kotlin Coroutine과 같은 대부분의 일반 라이브러리는 Compose 와 함께 작동한다. 실시간 미리보기 기능 제공 등을 통해 더 빠르게 작성할 수 있다.
강력한 성능
Compose 는 Android 플래폼 API 에 직접 액세스해 메테리얼 디자인, 어두운 테마, 애니메이션 등을 기본적으로 지원한다.
원하는 디자인을 유연하게 구현할 수 있다.
Compose 를 사용하면 애니메이션을 통해 쉽게 앱에 생명을 불어넣을 수 있다. 또한 원하는 디자인도 쉽게 구현할 수 있다.
상호 운용 가능
위에서 말했다시피 기존 Android View 시스템과 호환되어 Compose 에서 View 를 호출하거나 View 에서 Compose 를 호출할 수 있다. 따라서 기존 View 시스템으로 만들어진 프로젝트를 Compose 로 점진적 리팩터링 가능하다.
또 Compose 와 XML 은 리소스 파일을 공유할 수 있다.
예를 들어, 색상, 문자열 등의 리소스는 XML 에서 정의하고 Compose 에서 활용할 수 있다. 기존의 테마를 그대로 사용하거나 새로운 테마를 정의해서 사용할 수도 있다.
-> Compose 와 View 를 동시 사용했을 때 아직 성능 저하 이슈가 있는 것으로 알고있다.
내가 생각하는 컴포즈
컴포즈를 아직 제대로 사용해보지 않은 나는 XML View 가 익숙해서 그런지 kotlin 으로 짜여진 컴포즈 코드가 가독성이 떨어진다고 생각했다. 또한 주니어 개발자도 아닌 예비 개발자인 내가 컴포즈까지 하기엔 안드로이드에 공부할 것들이 너무 많다고 생각했다. 즉, 컴포즈는 할 줄 알지만 안드로이드 기본을 모르는 개발자가 되고싶지 않았다.
하지만 이제는 우테코가 끝나면서 여유가 생기기도 했고 실제로 컴포즈를 100% 사용하고 있는 팀들이 조금씩 생기고 있어 이제는 제대로 공부하고 적용해보려고 한다.
기존 View 가 익숙한 개발자들을 위해 Compose 에서는 어떤 비슷한 것이 존재하는지 알려주는 웹이다.
https://www.jetpackcompose.app/What-is-the-equivalent-of-RecyclerView-in-Jetpack-Compose