state에 에러가 있는 경우, LaunchedEffect 코드가 실행되며, 에러가 없어지면 LaunchedEffect 코드가 삭제되어 코루틴이 취소됨.
RememberCoroutineScope: 컴포지션 인식 범위 확보해 코루틴 실행
- 특징
LaunchedEffect와 다르게 Composable 외부에서 사용 가능
컴포지션 종료한 후 자동으로 취소되도록 범위 지정된 코루틴 실행
Button의 onClick함수는 람다로, Composable의 내부가 아님. 따라서 MovieScreen 컴포저블에 바인딩된 CoroutineScope를 생성하여 정지 함수인 showSnackbar를 실행함.
RememberUpdatedState: 값이 변경되는 경우 다시 시작되지 않아야 하는 효과에서 값 참조
(일정 시간이 지나면 사라지는 LandingScreen)
LandingScreen이 재구성되는 경우에 delay 및 onTimeout이 실행되면 안됨.
onTimeout은 LaunchedEffect에서 참조하지만 재실행 조건에서 제외함.
만약 onTimeout을 rememberUpdatedState로 감싸지 않으면 onTimeout이 변경되었을 경우에도 최초 onTimeout의 람다만 실행됨(최신값 갱신X)
DisposableEffect: key가 변경되거나 컴포지션 종료 후 정리해야 하는 효과
- 특징
key가 변경되거나 컴포지션이 종료된 후 리소스 해제 등 작업에 사용
LaunchedEffect와 비슷하나 컴포지션 종료 시 onDispose 꼭 호출
LaunchedEffect와 효과가 비슷하지만 lifecycleOwner가 변경되었을 경우 등록한 observer를 제거해 주는 작업이 필요, 이를 onDispose에서 처리
Side Effect: Compose 상태를 Compose가 아닌 객체와 공유
ProduceState: Compose 상태가 아닌 값을 Compose 상태로 만들어 반환
DerivedStateOf: 다른 상태 객체에서 특정 상태가 계산되거나 파생되는 경우 사용
- 특징
계산에서 사용되는 상태 중 하나가 변경될 때만 계산 시행
derivedStateOf는 todoTask가 변경될 때마다 highPriorityKeywords 계산 후 UI 업데이트.