본문 바로가기
안드로이드

[안드로이드] 빠르게 개발하려면 flowWithLifecycle

by keel_im 2022. 3. 9.
반응형

안녕하세요. 오늘은 flowWithLifecycle에 대해서 말해보려고 합니다.

참고로 이 글은 저의 경험적인 고찰이라서 틀린 내용이 있을 수 있습니다. 

이전 글에서

2021.12.26 - [안드로이드] - [안드로이드] repeatOnLifecycle 을 사용하며.

 

[안드로이드] repeatOnLifecycle 을 사용하며.

안녕하세요 오늘은 repeatOnLifecycle 에 관한 이야기를 써보려고 합니다. 먼저, MVVM 패턴을 사용하면서 LiveData -> Flow 로 변경하고자 하는 이유들이 있었습니다. ViewModel 에서는 플랫폼에 의존적인 코

keelim.tistory.com

 viewModel에서 Flow를 사용할때, repeatOnLifecycle을 사용하면 좋다고 언급했었습니다.

확실히 지금 생각해도 좋은 방법이긴 한데, 데이터의 집중하는 것이 아니라, 화면의 상태를 맞춰서 데이터를 조작하는 것이라 생각했습니다.

flowWithLifecycle 은 데이터가 화면의 상태에 따라 조작되어지는 것으로 생각됩니다.

repeatOnLifecycle (화면 상태 -> 데이터)
flowWithLifecycle (데이터 -> 화면상태)

사실 이렇게 정의는 했지만, 오히려 헷갈리시는 분께서는 다른 글도 참고하시면 좋을 것 같습니다.
그냥 제가 이해한 방법이라고 생각해주시면 좋을 것 같습니다.


코드를 한번 보겠습니다.

private fun observeStateBefore() = lifecycleScope.launch {
        repeatOnLifecycle(Lifecycle.State.STARTED){
            viewModel.loading.collect{
                binding.composeView.run {
                    bringToFront()
                    setContent {
                        CnubusTheme {
                            CircularIndeterminateProgressBar(it)
                        }
                    }
                }
            }
        }
    }

    private fun observeStateAfter() = lifecycleScope.launch {
        viewModel.loading
            .flowWithLifecycle(lifecycle, Lifecycle.State.STARTED)
            .collect {
                binding.composeView.run {
                    bringToFront()
                    setContent {
                        CnubusTheme {
                            CircularIndeterminateProgressBar(it)
                        }
                    }
                }
            }
    }

저는 위에서 아래 코드로 바꿨습니다. 

생각해보면 2개다 장단점이 있는 요소들인 것 같아요~ 
이전 꺼는 여러 개를 동시에 제어할 수 있다는 특성, 후자는 하나의 데이터에서 선택할 수 있는 점. 


3줄 요약

1. 써보니까. flowWithLifecycle 가 데이터에서 시작하니까 더 편하더라
2. 그렇다고 repeatOnLifecycle 이 나쁜 것은 아니다.
3. 여러가지 찾아보고 편한걸 사용해보자. 

반응형

댓글