-
Notifications
You must be signed in to change notification settings - Fork 0
[1] Jetpack Compose Basics
기존에 안드로이드 앱의 UX/UI를 구성하려면 기본적으로 res/layout 의 xml 파일들을 생성하고
xml 파일 안에서 각 종류의 layout을 만들어서 viewModel과 binding을 하거나 등의 xml 기반 레이아웃 제작이었다.
그 와 달리 Jetpack Compose는 모양과 데이터 종속 항목을 설명하는 구성 가능 함수(Composable)을 사용하여
'프로그래밍' 방식으로 UI를 구성한다.
[장점]
- 코드 수 감소
-> 아직 까지는 크게 체감이 안된다. - 직관적
-> 확실히 xml로 레이아웃을 구성하는것보다 코드로 View를 구성하는게 비교적 직관적인듯 - 개발이 빨라진다.
-> 역시나 크게 체감이 되지 않는다. 익숙해지면 빨라질듯 (개발자는 코드에만 충실하면 되니까)
[단점]
- 아직 활성화가 크게 되진 않음
- 자동완성 불편함
-> 자동완성이 오히려 더 시간을 소요하게 함. 키워드를 입력해서 자동완성이 떴는데 완전 엉뚱한 키워드가 나와버리는 경우가 종종있음. - 미리보기. 이럴거면 지원하지 말자
-> 기존의 xml로 레이아웃을 구성하면 tools 을 이용해서 visibility 상태 등 여러 경우를 한눈에 확인이 가능했다.
Compose도 Preview라는 기능을 제공하지만 사용자가 Preview를 할 부분을 코드로 명시해야한다.
익숙하지 않아서 그런건지 이 부분은 정말 불편한다.
Composable 함수를 선언할 때 사용하는 annotation. UI를 표시하는 함수를 사용하게 해준다.
UX/UI를 관리하는 범위? 부모? 명확한 정의를 내리기 어렵다.
UI 요소에 부모 레이아웃 내에서 레이아웃, 표시 또는 동작하는 방법을 알려준다.
UI 구성시에 많은 중첩이 생성되는데, 이는 가독성에 영향을 줄 수 있다.
재사용 가능한 작은 Composable 을 만들어서 앱에서 사용되는 UI 라이브러리를 구축할 수 있다.
Composable의 기본 표준 레이아웃 요소.
Column과 Row는 사용하면서 기존의 Linear Layout과 비슷하다고 생각했다.
이전에는 Boolean 타입의 변수를 가지고 UI의 상태를 판단했는데 Compose에서는 그것을 추적하지 않는다.
이를 해결하기 위해 MutableStateOf을 이용하면 UI 업데이트를 트리거 할 수 있다.
그렇지만 단순히 MutableStateOf 만 이용해선 안된다. 왜냐하면 Composable 언제든지 호출될 수 있기 때문이다.
따라서 remember라는 함수를 이용하여 고유의 값을 저장해준다. (subscribe의 방식을 이용)
Recyclerview의 기능을 보여주는 함수이다. 계속해서 스크롤 할 수 있는 기능을 제공한다.
차이점이라면 Recyclerview 와는 달리 재활용을 하지않는다.
그렇지만, View를 instantiating 하는것보다는 상대적으로 저렴한 방법이라고 한다.
remeber의 한 가지 약점은 Composable이 유지되는 동안에만 작동한다는 것이다.
따라서 다른 Activity로 이동하거나 아래로 스크롤을 내리는 등 화면이 바뀌고 다시 돌아오면 설정해놓은 UI가 모조리 다 초기화가 되어있다는 것이다.
이를 remeberSaveable로 방지할 수 있다.
Compose는 다양한 효과를 제공한다. 애니메이션 기능을 제공하는데 Spring 기반 애니메이션을 활용할 수 있다.
Theme을 구성하여 화면의 기본 규칙을 지정할 수 있다. 참고로 다크모드의 Theme도 구성가능하다.
Theme을 구성한 뒤 Theme의 Scope을 이용하여 Composable을 작동시킬 수 있다.