왜 LiveData 의 Observe 말고 StateFlow를 사용할까?

shin_stealer·2025년 3월 24일
0

StateFlow란?

상태를 담는 상자: StateFlow는 "항상 최신 값을 담고 있는 상자"라고 생각하면 돼요. 예를 들어, 학교 게시판에 최신 공지사항이 항상 붙어 있는 것처럼, StateFlow는 항상 최신 상태(값)를 기억해요.

바뀔 때마다 알려줌: 이 상자의 내용이 바뀌면, 그 변화를 보고 싶어하는 사람(예: 앱의 화면)이 바로 업데이트를 받을 수 있어요.

StateFlow를 사용하지 않으면 어떤 점이 불편할까?
직접 갱신해야 함: 만약 단순한 변수를 사용한다면, 그 값이 바뀌었을 때 매번 직접 찾아서(또는 알려줘야) 업데이트해야 해요. 예를 들어, 게임의 점수를 화면에 보여주려면, 점수가 바뀔 때마다 누군가가 "이제 점수가 이렇게 바뀌었어!"라고 알려줘야 해요.

업데이트 누락 위험: 만약 값이 바뀌었는데 그 변화를 제대로 전달하지 못하면, 화면에 오래된 정보가 남아 있을 수 있어요. 예를 들어, 여러분이 점수를 기록하는데, 점수가 바뀌어도 화면에 그 변화가 바로 나타나지 않는다면 게임이 제대로 진행되지 않겠죠?

관리 복잡도 증가: 여러 곳에서 데이터를 직접 관리하고 업데이트해야 하므로, 코드가 복잡해지고 실수가 생길 확률도 높아져요.

정리하면

StateFlow는 "항상 최신 상태를 자동으로 관리해주는 도구"예요.

사용하면: 데이터가 바뀔 때마다 자동으로 최신 정보를 화면에 보여줄 수 있어서 편리하고 안전해요.

사용하지 않으면: 최신 정보를 직접 관리해야 하므로, 업데이트가 늦어지거나 빠뜨리는 문제가 생길 수 있어요.

이런 이유로 StateFlow는 앱에서 데이터의 최신 상태를 유지하고, 그 변화를 자동으로 반영하는 데 큰 도움이 됩니다.

LiveData 방식도 충분히 잘 동작하고 널리 사용되는 패턴입니다. 다만, StateFlow를 사용하면 다음과 같은 몇 가지 장점을 얻을 수 있어요:

코루틴과의 자연스러운 통합

LiveData는 Android Lifecycle에 맞게 설계되어 있지만, StateFlow는 코루틴 기반이기 때문에 suspend 함수나 다른 Flow 연산자들과 함께 사용하기가 더 쉽습니다. 그래서 비동기 처리를 할 때 코드가 더 간결해질 수 있어요.

항상 최신 값 유지

StateFlow는 항상 최신 상태를 보관하기 때문에, 구독자가 새롭게 연결되었을 때 즉시 최신 값을 받을 수 있어요. LiveData도 최신 값을 유지하지만, StateFlow는 코루틴 환경에서 더 예측 가능한 방식으로 동작합니다.

테스트 용이성

코루틴과 Flow를 기반으로 하기 때문에, 단위 테스트나 통합 테스트를 할 때 상태 흐름을 제어하고 검증하기가 더 쉽습니다.

불필요한 observeForever 방지

LiveData를 observeForever로 관찰하면 Lifecycle의 도움을 받지 못해 메모리 누수 위험이 있습니다. 반면, StateFlow는 LifecycleScope나 repeatOnLifecycle 같은 코루틴 기반 함수를 사용하여 안전하게 구독할 수 있어요.

즉, 기존의 LiveData 방식도 충분히 잘 동작하지만, 코루틴을 적극적으로 사용하고자 할 때는 StateFlow가 더 깔끔하고 관리하기 쉬운 선택이 될 수 있습니다. 어떤 방식을 선택할지는 프로젝트의 요구사항과 팀의 선호도에 따라 달라질 수 있습니다.

profile
I am a Blacksmith.

0개의 댓글