해당 게시물은 과거에 작성한 블로그 내용을 옮겨 온 것으로, 가독성이 떨어지고 내용이 부정확할 수 있습니다.
- 한국말로 부수 효과를 의미
- Composable 외부에서 발생하는 앱 상태(State)에 대한 변경
- Composable은 Side-Effect에 Free 해야 하는 특성을 가짐
- Composable은 각자 생명주기를 가지고 있고, 단방향으로 State를 전달
- Composable 외부의 상태에 대해 변경을 주면 양방향 의존성이 생겨 Side-Effect 발생
- Composable의 범위에서 suspend 함수를 안전하게 실행
- LaunchedEffect는 Composable 함수
- LaunchedEffect가 Composition에 들어오면 인자로 전달된 coroutine 코드 블록 실행
- LaunchedEffect가 Composition에 없어지면 취소
- LaunchedEffect를 새로 실행하려면 key를 다른 key로 구성
- Compose에 의하여 관리되지 않는 객체가 있는 Compose의 상태를 공유
- 매 Recomposition마다 성공적으로 호출되는 Side-Effect 사용
- Side-Effect의 key 변화 이후에 Composition에서 Composable이 없어져 정리가 필요할 때 사용
- DisposableEffect의 key 변경 시 Composable이 현재의 효과를 없애고 효과를 다시 호출하여 설정
- 코드 블럭의 마지막에 반드시 onDispose를 포함
- Composable의 외부에서 coroutine의 실행을 위한 Composition 인식 범위 확보
- Composition이 종료되고 자동으로 취소되는 범위 지정
- remeberCoroutineScope가 호출된 Composition 시점에 바인딩되어 CoroutineScope 반환
- 호출이 Composition 종료 시 범위 종료
- 특정한 상황에서 coroutine으로 특정 동작 실행 시 유용
- Compose 상태가 아닌 것을 Compose 상태로 변환
- 외부 구독 기반 상태를 Compositino으로 변환
- productState가 composition으로 들어오면 producer가 실행
- productState가 Composition에서 사라지면 취소
- 상태를 반환
- 같은 value를 가지고 있으면 Recomposition 미발생
- produceState가 coroutine을 생성해도 non-suspending인 데이터 소스를 관찰 시 유용
- producer 블록에서 value 갱신 시 상태를 새 값으로 변경
- 값의 변경 발생 시 재시작되면 안 되는 효과의 값을 참조
- original data를 가져오는 경우에 사용
- 재생성 혹은 재시작 시 비용이 비싸거나 금지되는 오래 남은 작업을 포함하는 effect에 유용
- 다른 상태 객체로부터 계산 혹은 파생된 상태 포함 시 사용
- 계산에 사용된 상태 중 한 상태가 변경될 때마다 계산을 다시 수행
- Recomposition이 발생할 때마다 실행되면 비용이 비싸지므로 deriveStateOf 사용
- State< T >를 cold Flow로 변환
- collect 시 snapshotFlow 블록 실행 후 읽은 상태 결과를 collect에 방출
- 블록 내에서 읽어온 값 중 하나가 변경되면 새로운 값이 이전의 값과 동일하지 않을 때 새 값을 방출
- Flow 연산자 활용 가능