일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- disposableeffect
- filternotnull()
- 자바
- nullpointerexception방지
- list
- Hilt
- 오블완
- 프로그래머스
- Java
- 백준파이썬
- ContentProvider
- compose
- 티스토리챌린지
- 파이썬
- 문자열
- Kotlin
- 배열
- 파이썬문법
- Dependency
- 자바set
- jetpack
- Python
- Provider
- 자바리스트정렬
- android
- composelifecycle
- 자료형
- 리스트
- programmers
- 백준
Archives
- Today
- Total
study gomi
Jetpack Compose에서 생명 주기 처리 / LaunchedEffect, SideEffect, DisposalEffect / 설명, 비교 요약 본문
App/Android
Jetpack Compose에서 생명 주기 처리 / LaunchedEffect, SideEffect, DisposalEffect / 설명, 비교 요약
공부하곰 2024. 11. 22. 15:02728x90
반응형
컴포저블에서의 효과(side-effects)를 처리하기 위해 사용하는 것들.
1. LaunchedEffect
: 컴포저블이 처음 Composition에 추가되었을 때 한 번 실행되는 코루틴. 주로 비동기 작업을 수행하거나 초기화 작업을 처리할 때 사용
1-1. 특징
- 컴포저블의 Lifecycle과 연동됨.
- 주어진 키(key)가 변경될 때마다 실행.
- 내부에서 suspend 함수를 호출할 수 있다.
- 컴포저블이 Recomposition될 때 다시 실행되지 않는다(키가 변경되지 않는 한).
1-2. 주요 시나리오
- API 호출 등 초기 작업이 필요한 경우
- Animation 등 suspend 함수 기반 작업
- ViewModel 데이터 관찰 시작
1-3. 사용법
@Composable
fun MyScreen(data: String) {
LaunchedEffect(data) {
// 키가 변경될 때 실행
println("Data is $data")
}
}
2. SideEffect
: 컴포저블의 Recomposition이 발생할 때마다 실행되는 동작. 주로 Compose 외부 시스템과의 통신 또는 UI 업데이트를 처리할 때 사용
2-1. 특징
- Recomposition마다 실행
- MutableState의 값을 변경하는 등 Compose의 상태와 외부 상태를 동기화할 때 유용.
- UI와 상호작용이 없는 작업에 적합.
2-2. 주요 시나리오
- 로깅이나 디버깅 작업
- Compose 상태를 외부 시스템이나 객체에 동기화
- UI 변경과 관련 없는 작업
2-3. 사용법
@Composable
fun MyScreen(counter: Int) {
SideEffect {
println("Current counter value: $counter")
}
}
3. DisposableEffect
: 컴포저블이 생성될 때 실행되며, 컴포저블이 Composition에서 제거될 때 정리 작업을 수행. 주로 리소스 해제, 리스너 제거 등 Lifecycle과 관련된 작업에 사용
3-1. 특징
- onDispose 블록을 사용하여 정리(cleanup) 작업을 수행할 수 있다.
- Compose의 Composition Lifecycle을 직접 다룰 때 유용.
- DisposableEffect는 주어진 키(key)가 변경될 때마다 다시 실행됨.
3-2. 주요 시나리오
- 리소스 해제 (e.g., BroadcastReceiver 해제, Listener 제거)
- Composition Lifecycle을 기준으로 동작 관리
- ViewModel 등 Compose 외부에서의 상태 변경 감지
3-3. 사용법
@Composable
fun MyScreen(listener: SomeListener) {
DisposableEffect(listener) {
listener.register() // 초기화 작업
onDispose {
listener.unregister() // 정리 작업
}
}
}
비교: 언제 어떤 걸 사용?
요약
- LaunchedEffect
- 초기화 작업이나 Suspend 함수 호출이 필요할 때.
- 컴포저블이 처음 등장하거나 키가 변경될 때 실행.
- SideEffect
- 상태 동기화나 로깅 같은 부수 효과를 처리.
- Recomposition마다 실행됨.
- DisposableEffect
- 리스너 등록/해제 같은 작업.
- Lifecycle 이벤트와 관련된 동작을 처리.
728x90
반응형
'App > Android' 카테고리의 다른 글
[Hilt] 의존성 생성 방법 (0) | 2024.11.25 |
---|---|
[Hilt] Hilt의 의존성 그래프 (0) | 2024.11.25 |
[Android/Kotlin] floating button에 직접 그림자 주기 (0) | 2024.10.23 |
[Android/Kotlin] text를 표시하는 floating button (jetpack compose) + button 아래에 하얀색 공백이 보이는 문제 (0) | 2024.10.23 |
[Android/Kotlin] expandable + moveable/draggable Floating button (jetpack compose) (3) | 2024.10.23 |