컴포즈 캠프 1주차
컴포즈 캠프 1주차 여행을 다녀왔습니다~ 신나는 OX 퀴즈, 딸기는 장미과라고 합니다.
Thinkg in Compose
재구성(Recomposition)
Compose에서는 새 데이터를 사용하여 구성 가능한 함수를 다시 호출합니다. 이렇게 하면 함수가 재구성되며, 필요한 경우 함수에서 내보낸 위젯이 새 데이터로 다시 그려집니다. Compose 프레임워크는 변경된 구성요소만 지능적으로 재구성할 수 있습니다.
하지 말아야할 것
- 공유 객체의 속성에 쓰기
- ViewModel에서 식별 가능한 요소 업데이트
- 공유 환경설정 업데이트
@Composable
fun SharedPrefsToggle(
text: String,
value: Boolean,
onValueChanged: (Boolean) -> Unit
) {
Row {
Text(text)
Checkbox(checked = value, onCheckedChange = onValueChanged)
}
}
- Composable function은 순서와 관계없이 실행할 수 있습니다.
- Composable function은 동시에 실행할 수 있습니다.
- Recomposition은 최대한 많은 수의 구성 가능한 함수 및 람다를 건너뜁니다.
- Recomposition은 낙관적이며 취소될 수 있습니다.
- Composable function는 애니메이션의 모든 프레임에서와 같은 빈도로 매우 자주 실행될 수 있습니다.
새롭게 알게 된 것
- compose ui의 속도를 위해서는 메소드를 가볍게 해야한다
- 가볍게라는 범위는 공유 객체, ViewModel, SharedPreference와 compose ui가 연관이 되면 안된다. 해당 로직에 이와 같은 코드가 있게 되면 ui를 그리는 function이 무거워지기 때문에, ui 그리는 것이 무거워진다.
- recomposition은 모든 로직을 실행해주는 것은 아니다. 모든 것은 낙관적으로 로직이 실행되며, 순서, 동시성, 메소드 호출에 대해서 보장해주지 않기 때문에 이러한 로직은 ui단에서 처리하지 말아야한다.
@Composable
@Deprecated("Example with bug")
fun ListWithBug(myList: List<String>) {
var items = 0
Row(horizontalArrangement = Arrangement.SpaceBetween) {
Column {
for (item in myList) {
Text("Item: $item")
items++ // Avoid! Side-effect of the column recomposing.
}
}
Text("Count: $items")
}
}
Jetpack Compose 기초
중요하다고 생각하는 것들
- State 및 MutableState는 변경될 때마다 UI를 리컴포지션 한다.
- remember는 리컴포지션을 방지하는데 사용되어, 상태가 재설정 되지 않는다.
- remember를 사용할 때, by를 사용하게 되면, state.value 코드를 위임시켜준다.
- rememberSaveable을 사용하게 된다면, 화면이 돌아가거나 할 때에도 데이터가 유지된다.
- 그렇다면 remember와 rememberSaveable의 차이는 무엇일까?
- rememberSaveable은 bundle에 저장될 수 있는 값들을 저장한다고 한다. 아마도, 안드로이드 bundle에 데이터를 저장해 configuration과 관련된 작업에서 데이터를 유지하는 것과 같이 rememberSaveable은 이와 유사하게 동작하지 않을까 생각해본다. -> 이 부분은 전적으로 내 생각 -> 추후에 찾아보자
해당 챕터는 너무 많은것을 가르친다. 기 빠진다.
'Android 공부 > Android Library Study' 카테고리의 다른 글
compose study - 3주차 (0) | 2022.12.10 |
---|---|
compose study - 2주차 (0) | 2022.12.10 |
Support for newer Java language APIs (0) | 2020.07.15 |
RecyclerView-selection 느낀 점 (1) | 2020.04.04 |
RecyclerView 더 잘쓰기 (2) | 2020.01.21 |