/* 본 게시물은 ' Jetpack Compose | Android developer ' 의 내용을 토대로 작성되었습니다. */
참고 자료
[Jetpack Compose | Android developer] : https://developer.android.com/courses/pathways/compose
#Jetpack compose UI
1. Jetpack compose 를 왜 사용해야 할까?
Jetpack compose는 기존의 View를 대체할 tool kit 이다. Jetpack compose는 직관적이고 강력하다. 훨씬 적은 코드로 UI를 생성할 수 있다. 이는 처음부터 개발을 가속화할 수 있도록 도와준다. 또한, UI에 들이는 시간을 줄여 기능을 구현하는데 집중할 수 있다.
뷰 기반의 기존 툴킷은 10년이 지났다. 그 기간동안 기술들은 발전하고 기기 성능 향상과 앱에 대한 사용자 기댓값이 높아졌다. 기존의 뷰 방식으로는 UI를 동적으로 만들기 위해 복잡한 코드가 필요했지만 Jetpack compose는 UI를 동적으로 만들기 좋다. 특히, 애니메이션 부분을 훨씬 더 간결하게 설정할 수 있다.
2. Jetpack Compose란?
Jetpack compose의 특징으로는 선언적 독립형 코드(클릭)이다. 기존 View 계층 구조에서는 UI를 업데이트 하기 위해서는 findViewById() / ViewBinding 로 트리를 탐색하고 button.setText(String), container.addChild(View) 과 같은 메서드를 호출하여 노드를 변경했다. 이러한 메서드는 위젯의 내부 상태를 변경했다. 하지만 이러한 방식은 오류 발생이 쉽게 일어날 수 있고, 업데이트가 필요한 뷰의 수가 많을수록 소프트웨어 유지관리 복잡성이 증가한다.
이러한 한계를 해결하고자, 최근 몇 년에 걸쳐 업계 전반에서 선언형 UI모델로 전환하기 시작했으며, 이러한 흐름에 탄생한게 Jetpack Compose이다. Jetpack Compose는 선언형 UI 프레임 워크이다.
기존의 방식과는 다르게 이 기법은 처음부터 화면 전체를 개념적으로 재생성한 후 필요한 변경사항만 적용하는 방식으로 작동한다. 화면 전체를 재생성하는데 있어 시간, 비용이 많이 드는데 Compose 컴파일러는 이 비용을 줄이기 위해 특정 시점에 UI의 어떤 부분을 다시 그려야 하는지를 지능적으로 선택한다. 즉, UI의 변화가 생기면 UI를 새로운것으로 바꾼다. 기존처럼 UI를 업데이트 하는 것이 아닌 새로운 UI를 만드는 것으로 이해하면 된다. (재구성)
@Composable : 뷰를 만드는 구간이다. 데이터를 파라미터로 받아 UI를 만들어준다. UI가 동기화 상태에서 벗어나지 않는다는 특징이 있다.
ViewModel의 데이터를 직접 감시 객체를 설정할 필요가 없다. 컴파일러가 자동으로 입력이 변경된 것만 반영한다. 즉, ViewModel과 같은 아키텍처 패턴에 상태를 쉽게 설정할 수 있다.
View와 호환 가능 따라서 Compose의 구현이 안된 기능들을 기존의 View를 가져와 만들 수 있다.