Compose - Side Effects¶
부수 효과(side-effect)는 컴포저블 함수의 범위 밖에서 발생하는 앱 상태에 관한 변경 사항입니다.
컴포저블에는 부수 효과가 없는 것이 좋습니다
컴포지션은 모든 UI에서 재구성될 수 있기 때문에 비용이 큰 작업(네트워크 I/O, 디스크 I/O 등)일 경우 버벅임을 야기할 수 있습니다.
왜 사용하는가?¶
사실 원칙대로면 컴포저블 함수에서 부수 효과는 쓰지 말아야 합니다.
단, 앱의 상태(status)를 변경해야 하는 경우 예측 가능한 방식으로 실행될 수 있도록 부수 효과 API를 사용하는 것을 권장합니다.
사용법¶
컴포즈에서 다양한 효과1를 지원하기 때문에 남용될 여지가 많습니다.
효과에서 실행하는 작업이 단방향 데이터 흐름을 중단하지 않아야 합니다
LaunchedEffect¶
컴포저블에서 suspend
함수를 호출할 때 사용합니다.
LaunchedEffect
가 컴포지션을 시작하면 매개변수로 전달된 코드 블록({ }
)으로 코루틴이 실행됩니다.
LaunchedEffect
가 컴포지션을 종료하면 코루틴이 취소됩니다.
rememberCoroutineScope¶
LaunchedEffect
는 컴포저블 함수이므로 컴포저블 함수 안에서만 사용할 수 있는 단점을 가지고 있습니다.
컴포저블 외부에서 코루틴을 시작하지만 컴포지션을 벗어나면 자동으로 취소되도록 범위가 지정된 경우 rememberCoroutineScope
를 사용하면 됩니다.
rememberCoroutineScope
는 호출되는 컴포지션의 지점에 바인딩된 CoroutineScope
를 반환하는 컴포저블 함수입니다. 호출이 컴포지션을 벗어나면 scope
가 취소됩니다.
-
'효과'란 UI를 그리지 않으며 컴포지션이 완료될 때 부수 효과를 실행하는 컴포저블 함수입니다. ↩