일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 공기먹는다이버스
- 시밀란
- Cocoapods #PrivateRepo #SpecRepo
- 러브자그레브
- 아시아나
- 라이브러리
- 강릉
- 리브어보드
- swiftUI
- 도심공항
- 스플리트
- 크로아티아
- 연금저축펀드
- 러브스플리트
- 지팍스페인
- Concurrency #Swift #Combine
- 스쿠버다이빙
- Gradle
- xcode
- 스페인광장
- 대한항공
- Swift #Concurrency #쓰레드
- 스페인여행
- 괌 자유여행
- 푸켓여행
- 그라나다
- cocoapod
- Device 등록
- SwiftUI #Skeleton #데이터갱신
- 세비야
- Today
- Total
JEP's Diary
Compose 기본사항 키워드 정리 본문
Compose Phases
1.Composition : 어떠한 UI를 그릴지
2.Layout : UI를 측정하고 어디에 그릴지
3.Drawing : UI를 렌더링
Recomposition
이미 수행한 Compose Phases를 다시 1번 Composition 부터 다시 수행하는 것
https://getstream.io/blog/jetpack-compose-guidelines/
State, MutableState
Compose의 State, MutableState 유형을 사용하여 Compose에서 상태를 관찰할 수 있도록 한다. State value 속성을 읽는 각 컴포저블을 추적하고 그 value가 변경되면 recomposition을 트리거 한다. mutableStateOf 함수를 사용하여 관찰가능한 MutableState를 만들 수 있다. 이 함수는 초기값을 State 객체에 래핑된 매개변수로 수신한 다음, value의 값을 관찰 가능한 상태로 만든다.
https://developer.android.com/jetpack/compose/state
-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
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 |