전체 글 (13) 썸네일형 리스트형 [Jetpack Compose Side-effects] 5. LifecycleEventEffect 서론 구현 요구사항 중 앱이 백그라운드에서 포그라운드 상태로 진입하는 경우를 판단해야 하는 사항이 있었습니다. 리서치 결과 Activity의 Lifecycle의 변화에 따라 원하는 작업을 수행하고자 했습니다. 따라서 Activity의 Lifecycle과 Composable을 연결해야 했고, 앞서 포스팅한 DisposableEffect를 이용하는 것이 보편적인 방법인 듯 했습니다. 하지만 스택오버플로우 답변을 보고 새로운 Side-effects를 이용해 보다 간단하게 문제를 해결할 수 있음을 알게 되었습니다. LifecycleEventEffect 먼저 해당 Side-effects를 사용하기 위해서는 다음과 같이 lifecycle-runtime-compose:2.7.0-alpha01 이상을 implement.. [Jetpack Compose Side-effects] 4. DisposableEffect DisposableEffect Activity의 Lifecycle에서 onDestroy가 될 때 observer나 리소스를 정리했던 것처럼 Compose에서는 Composable이 화면에서 사라지면서 observer나 리소스를 정리해야 하는 경우 DisposableEffect를 활용할 수 있습니다. 앞서 살펴보았던 LaunchedEffect와 마찬가지로 최초로 화면에 Composable이 그려질 때 DisposableEffectScope이 호출됩니다. 따라서 해당 영역에서 observer나 리소스를 초기화할 수 있습니다. 또한 DisposableEffect 역시 인자로 key를 받게 되는데, LaunchedEffect가 key 값의 변화에 따라 재호출되었던 것처럼 DisposableEffect도 key가.. [Jetpack Compose Side-effects] 3. rememberUpdatedState rememberUpdatedState remember는 recomposition이 일어날 때 상태를 관리하기 위해서 사용합니다. remember의 상태를 변경하는 유일한 방법은 value 키워드를 이용해 직접 수정해주는 것 입니다. 따라서 상위 Composable에서 값이 변경되어도 하위 Composable에서 remember로 변수가 만들어졌다면 바뀐 State를 내려주어도, value 키워드로 수정해준 것이 아니기 때문에 하위 Composable에서 변수의 value가 바뀌지 않습니다. 아래의 코드를 살펴보면 하위 Composable인 ResultText에서 input을 인자로 받아 rememberResult 변수를 remeber를 활용해 초기화하고 있습니다. 이렇게 remember를 활용한 경우, .. [Jetpack Compose Side-effects] 2. rememberCoroutineScope rememberCoroutineScope Compose에서는 rememberCoroutineScope을 통해 해당 Composable의 Lifecylce을 따르는 CoroutineScope를 제공합니다. 여기까지만 보면 LaunchedEffect에서 제공하는 CoroutineScope과 동일한 기능을 하는 것처럼 보입니다. 하지만 LaunchedEffect는 Composable이기 때문에 다른 Composable 내부에서만 사용할 수 있습니다. remeberCoroutineScope을 활용하면 특정 Composable의 CoroutineScope을 하위의 다른 Composable에서도 이용할 수 있습니다. 아래 코드를 보면 SideEffectScreen()의 CoroutineScope을 remeberCo.. [Jetpack Compose Side-effects] 1. LaunchedEffect 서론 최근 팀원 한 분이 코드 리뷰로 derivedStateOf를 사용해 코드의 중복 제거와 상태 관리를 안전하고 편하게 하는 방법을 알려주셔서 Compose의 Side-effects를 잘 알아두고 적재적소에 활용하면 불필요한 리컴포지션을 줄이고 코드를 간결하게 만들 수 있을 것 같아 정리해보려고 합니다. 자주 사용하는 LaunchedEffect 부터 생소한 snapshotFlow 등 다양한 Side-effects 들을 다룰 예정입니다. Side-effects 란? 먼저 Side-effects가 무엇인지부터 알고 넘어가려고 합니다. Compose에서는 데이터의 값이 변하면 새로운 데이터 값을 이용해 Composable을 다시 호출합니다. 다시 호출하면서 함수가 recomposition 되며, 새로운 데이.. 이전 1 2 다음