콘텐츠로 이동

Compose - Side Effects

부수 효과(side-effect)는 컴포저블 함수의 범위 밖에서 발생하는 앱 상태에 관한 변경 사항입니다.

컴포저블에는 부수 효과가 없는 것이 좋습니다

컴포지션은 모든 UI에서 재구성될 수 있기 때문에 비용이 큰 작업(네트워크 I/O, 디스크 I/O 등)일 경우 버벅임을 야기할 수 있습니다.

왜 사용하는가?

사실 원칙대로면 컴포저블 함수에서 부수 효과는 쓰지 말아야 합니다.

단, 앱의 상태(status)를 변경해야 하는 경우 예측 가능한 방식으로 실행될 수 있도록 부수 효과 API를 사용하는 것을 권장합니다.

사용법

컴포즈에서 다양한 효과1를 지원하기 때문에 남용될 여지가 많습니다.

효과에서 실행하는 작업이 단방향 데이터 흐름을 중단하지 않아야 합니다

LaunchedEffect

컴포저블에서 suspend 함수를 호출할 때 사용합니다.

LaunchedEffect가 컴포지션을 시작하면 매개변수로 전달된 코드 블록({ })으로 코루틴이 실행됩니다.

LaunchedEffect가 컴포지션을 종료하면 코루틴이 취소됩니다.

rememberCoroutineScope

LaunchedEffect는 컴포저블 함수이므로 컴포저블 함수 안에서만 사용할 수 있는 단점을 가지고 있습니다.

컴포저블 외부에서 코루틴을 시작하지만 컴포지션을 벗어나면 자동으로 취소되도록 범위가 지정된 경우 rememberCoroutineScope를 사용하면 됩니다.

rememberCoroutineScope는 호출되는 컴포지션의 지점에 바인딩된 CoroutineScope를 반환하는 컴포저블 함수입니다. 호출이 컴포지션을 벗어나면 scope가 취소됩니다.


  1. '효과'란 UI를 그리지 않으며 컴포지션이 완료될 때 부수 효과를 실행하는 컴포저블 함수입니다. 

댓글