Android/Android Compose
컴포즈의 Side-Effect 형제들에 대해서 알아보자 - 2
최데브
2024. 4. 28. 22:24
2024.04.21 - [Android/Android Compose] - 컴포즈의 Side-Effect 형제들에 대해서 알아보자 - 1
컴포즈의 Side-Effect 형제들에 대해서 알아보자 - 1
컴포즈에는 side effect 라는 개념이 존재한다. 단어의 원래 뜻은 부작용이라는 뜻인데 왜 이런 명칭을 붙였는지 의아하긴 했는데 찾아보니 composable 은 단방향으로 state 를 전달하는게 기본인데 전
choi-dev.tistory.com
이전 글에 이어서 알아보자.
이번에는
- DisposableEffect
- SideEffect
이렇게 알아볼 예정이다.
DisposableEffect
는 앞글에서 봤던 LaunchedEffect 와 비슷하지만 취소됐을때 onDispose 가 호출된다.
취소될때의 동작을 추가할 수 있는것이다.
아래 코드처럼 작성할 수 있다.
DisposableEffect(menuState) {
when (menuState) {
BottomDialogMenu.LinkAdd -> {
mainViewModel.updateScreenState(MainScreenState.LINKADD.state)
}
BottomDialogMenu.GroupAdd -> {
mainViewModel.updateScreenState(MainScreenState.GROUPADD.state)
}
else -> {
}
}
onDispose {
mainViewModel.updateMenuState(BottomDialogMenu.None)
}
}
SideEffect
Compose에서 관리하는 객체가 아닌 객체에 compose의 상태를 공유하기 위한 용도로 사용되며
Composition이 완료되면 진행할 동작을 예약할 때 사용한다.
이 함수는 recomposition이 일어날 때마다 호출된다.
따라서 효율적인 사용을 위해 특정 시점에 사용할 때는 LaunchedEffect를, 자원 해제가 필요한 경우에는 DisposableEffect를 사용하는 것이 좋다.
val callback = remember { ... }
SideEffect {
callback.isEnable = isEnable
}
이렇게 쓸 수 있다.