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 

}

 

이렇게 쓸 수 있다.

반응형