부수 효과란?
- 구성 가능한 함수의 범위 밖에서 발생하는 앱 상태에 관한 변경사항
- 컴포저블의 수명 주기 및 속성으로 인해 컴포저블에는 부수 효과가 없는 것이 좋으나 특정 상황에 필요한 경우가 있음
LaunchedEffect
- 컴포저블의 범위에서 정지함수를 실행
- 컴포저블 내에서 안전하게 정지함수를 호출하기 위해 사용
rememberCoroutineScope
- 컴포지션 인식 범위를 확보하여 컴포저블 외부에서 코루틴 실행
- 컴포저블 외부에 있지만 컴포지션을 종료한 후 자동으로 취소되도록 범위가 지정된 코루틴을 실행하기 위해 사용
rememberUpdatedState
- 값이 변경되는 경우 다시 시작되지 않아야 하는 효과에서 값 참조
- 주요 매개변수 중 하나가 변경되면 LaunchedEffect가 다시 시작됨. 하지만 경우에 따라 효과에서 값이 변경되면 효과를 다시 시작하지 않을 값을 저장해놓을 수 있음.
- 상태 자체는 기억되어 있지만 값을 새로운 값으로 업데이트 되어 있음
DisposableEffect
- 정리가 필요한 효과
- 키가 변경되거나 컴포저블이 컴포지션을 종료한 후 정리해야하는 경우 사용
SideEffect
- Compose 상태를 비 Compose 코드에 게시
produceState
- 비 Compose 상태를 Compose 상태로 변환
derivedStateOf
- 하나 이상의 상태 객체를 다른 상태로 변환
- 해당 함수를 사용하면 계산에서 사용되는 상태 중 하나가 변경 될 때만 계산이 실행됨
- 불 필요한 리 컴포지션 호출을 방지할 수 있다.
snapshotFlow
- Compose의 상태를 Flow로 전환 (State 객체를 콜드 Flow로 변환)
- 이전에 방출한 값과 다를 경우에 방출한다.
출처 - https://developer.android.com/jetpack/compose/side-effects?hl=ko#snapshotFlow