JEP's Diary

Compose 기본사항 키워드 정리 본문

Development/Android

Compose 기본사항 키워드 정리

지으니88 2022. 11. 15. 22:21

Compose Phases

1.Composition : 어떠한 UI를 그릴지

2.Layout : UI를 측정하고 어디에 그릴지

3.Drawing : UI를 렌더링 

 

Recomposition

이미 수행한 Compose Phases를 다시 1번 Composition 부터 다시 수행하는 것

https://getstream.io/blog/jetpack-compose-guidelines/

 

6 Jetpack Compose Guidelines to Optimize Your App Performance

In this article, you’ll learn how to optimize your app performance following Stream’s top six Jetpack Compose guidelines.

getstream.io

 

State, MutableState

Compose의 State, MutableState 유형을 사용하여 Compose에서 상태를 관찰할 수 있도록 한다. State value 속성을 읽는 각 컴포저블을 추적하고 그 value가 변경되면 recomposition을 트리거 한다. mutableStateOf 함수를 사용하여 관찰가능한 MutableState를 만들 수 있다. 이 함수는 초기값을 State 객체에 래핑된 매개변수로 수신한 다음, value의 값을 관찰 가능한 상태로 만든다.

 

https://developer.android.com/jetpack/compose/state

 

상태 및 Jetpack Compose  |  Android Developers

상태 및 Jetpack Compose 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 앱의 상태는 시간이 지남에 따라 변할 수 있는 값입니다. 이는 매우 광범위한 정의로서 R

developer.android.com

-Value Holder

-Observable

-Recomposition Trigger

 

remember, rememberSaveable, rememberLazyListState

object 값을 메모리에 저장해놓고 recomposition이 발생할때 메모리에서 가져온다.

remember를 사용하면 recomposition 간에 상태를 유지하는데 도움이 되지만 구성 변경(회전, 테마변경 등)간에는 유지 되지 않는다. 이때는 remember 대신에 rememberSaveable를 사용한다.

rememberLazyListState는 rememberSavable을 사용하여 목록의 초기상태를 만든다. 활동이 다시 생성되면 스크롤 상태를 아무런 코딩을 하지 않아도 유지된다. 

https://developer.android.com/jetpack/compose/lists#react-to-scroll-position

 

Composable 생명주기

Composable을 종료하면 remember Satate가 삭제된다.

https://developer.android.com/jetpack/compose/lifecycle#lifecycle-overview

Stateful

Composable 함수 내에 state/remember state/ mutablestate 변수가 있는 경우 Stateful 하다 라고 표현한다.

 

Stateless

Composable 함수 내에 state 변수가 없는 경우 Stateless 하다 라고 표현한다. 상태 호이스팅을 사용하면 Stateless Composable을 쉽게 만들 수 있다.

 

Stateless Composable함수를 더 권장한다.

1.Single source of truth : state를 제공하는 호출자 쪽에서  소스를 단일화 시키고 소스의 원천이 유일하다는 것을 보장할 수 있다.

2.Encapsulated : 특정한 stateful 한 Composable 함수에 대해서만 state를 관리할 수 있도록 하고, 더 나아가 외부에서는 State에 대한 정보를 알 수 없도록 캡슐화 할 수 있다.

3.Decoupled : State로부터 자유로워서 더 독립적이고, 결과적으로 재사용성을 높일 수 있다.

 

State Hoisting(상태 호이스팅)

상태 호이스팅은 Composable을 Stateless로 만들기 위해 State를 Composable의 호출자로 옮기는 패턴이다.

Statful한 Composable 함수를 Stateless하게 만드는 것을 State Hoisting 이라고 표현한다. 일반적인 패턴은 State변수를 다음 두 개의 배개변수로 바꾸는 것이다.

value: T - 표시할 현재 값

onValueChange:(T) -> Unit - 값을 변경하도록 요청하는 이벤트.

 

 

CompositionLocal

기본적으로 제공되는 CompositionLocal말고 커스텀도 가능하다.

https://developer.android.com/jetpack/compose/compositionlocal

 

CompositionLocal을 사용한 로컬 범위 지정 데이터  |  Jetpack Compose  |  Android Developers

CompositionLocal을 사용한 로컬 범위 지정 데이터 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. CompositionLocal은 암시적으로 컴포지션을 통해 데이터를 전달하

developer.android.com

ViewModel 과의 연결

ViewModel은 composition의 일부가 아니다. 따라서 메모리 누수가 발생할 수 있으므로 컴포저블에서 만든 상태(예: 기억된 값)를 보유해서는 안된다.

'Development > Android' 카테고리의 다른 글

Android Webview의 Bridge를 대신할 WebMessagePort  (0) 2022.11.02
Compose 이해  (0) 2022.11.02
Compose Camp 시작!  (0) 2022.11.02
ViewPager2  (0) 2021.01.06
Android ViewModel  (0) 2018.08.08