본문 바로가기

Android 공부/Android Library Study

compose study - 1주차

컴포즈 캠프 1주차

 컴포즈 캠프 1주차 여행을 다녀왔습니다~ 신나는 OX 퀴즈, 딸기는 장미과라고 합니다.

Thinkg in Compose

 

Compose 이해  |  Jetpack Compose  |  Android Developers

Compose 이해 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Jetpack Compose는 Android를 위한 현대적인 선언형 UI 도구 키트입니다. Compose는 프런트엔드 뷰를 명령

developer.android.com

재구성(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 기초

 

Jetpack Compose 기초  |  Android Developers

이 Codelab에서는 Compose의 기본사항을 알아봅니다.

developer.android.com

중요하다고 생각하는 것들

  • 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