[Compose Side Effect] rememberCoroutineScope을 이용해 Composable의 생명주기에 맞춰 코루틴 수행하기
컴포즈 함수 내부에서 쌩으로 코루틴을 수행할 경우, 만약 재구성(Recomposition)이 발생하면 , 이전 코루틴이 정리가 안된 상태로 계속해서 코루틴이 재실행되어 코루틴이 쌓일 수 있다.
Recomposition
**은 자주 일어나는 동작이므로, Recomposition
마다 코루틴을 생성하는 것은 위험하며, 심할 경우 앱 크래시를 발생시킬 수도 있다.**lifecycleScope
**를 컴포즈함수에 사용할경우:
컴포즈 함수 내부에서 코루틴을 생성한다면, 컴포즈 함수가 Leave
될때 코루틴도 같이 Cancel
되어야 한다.
컴포즈는 이를위해 컴포즈함수의 수명주기를 따르는 코루틴 스코프를 반환하는 rememberCoroutineScope()
를 제공한다.
**rememberCoroutineScope
**의 Suspend
수명주기는 다음과 같다.
실행시점 | 종료시점 | 재실행 Tigger 조건 |
---|---|---|
Compostion enter | Composition leave | 재실행 없음 (이미 실행중인 suspend 함수는 재구성에 의해 중단되지 않음) |