본문 바로가기

Android/Flow4

Coroutine Flow(4) - 총정리 Flow에서 생산자는 데이터를 Flow에 입력하고 소비자는 Flow에서 데이터를 수집하는 역할을 가지고 있다. Android에선 데이터 소스나 레포지토리가 전형적인 생산자이고, 최종적으로 화면에 데이터를 표시하는 UI가 소비자 역할을 한다. Creating Flows그렇다면 우선 Flow를 생성하는 방법을 알아보자. 대부분의 경우 Flow를 직접 만들 필요는 없으며, 데이터 소스 라이브러리는 보통 Flow와 통합되어 있다. DataSource, Retrofit, Room, WorkManager 등이 존재한다. 이들은 댐 역할을 수행하며 Flow를 사용하여 데이터를 제공하고, 개발자는 구현 방법을 몰라도 파이프에 연결만 하면 데이터를 사용할 수 있다. Room을 예시로 들어보자.위 코드에서 List타입의 .. 2023. 7. 3.
Coroutine Flow(3) LiveData vs StateFlow LiveDataLiveData는 Lifecycle 라이브러리 중 하나로, 안드로이드 공통의 라이프사이클과 관련된 문제를 해결할 수 있게 해주면서 앱 개발시 보다 더 유지보수하기 쉽게, 테스트하기 쉽게 만들어주는 라이브러리이다. LiveData는 Observer 패턴을 활용하여 구현되었으며, 관찰 가능한 일반 클래스인 ObservableXXX 클래스와는 달리 LiveData는 생명주기의 변화를 인식한다. 즉, Activity, Fragment, Service 등 안드로이드 컴포넌트의 생명주기 인식을 통해 Active 상태에 있는 컴포넌트에서만 업데이트를 한다. LiveData의 장점Activity와 Fragment는 LiveData 객체를 안전하게 관찰할 수 있고, 생명주기가 끝나는 즉시 관찰을 멈추기 때.. 2023. 7. 3.
Coroutine Flow(2) - StateFlow, SharedFlow Flow의 한계Flow는 Kotlin의 비동기적인 데이터 스트림을 처리하기 위한 라이브러리이다. 즉, Flow를 사용하면 데이터를 비동기적으로 처리하고 연속된 값을 스트림으로 표현할 수 있다. 하지만 Flow는 데이터를 저장하는 기능을 제공하지 않는다. Flow는 데이터 스트림을 생성하고, 변환하고, 조작하는 기능을 제공하지만, 스스로 데이터를 저장할 수 없다. 따라서 Flow를 사용하여 데이터를 영구적으로 저장하고 관리해야 하는 경우, 별도의 데이터 홀더 변수를 만들어야 한다.즉, Flow는 데이터를 저장하는 개념이 아닌 데이터의 흐름(Stream)인 것이다. 별도의 데이터 홀더 변수를 통해 데이터를 저장해보면 다음과 같은 예시를 둘 수 있다.(메모를 작성하고 저장하는 앱을 개발한다고 가정) Data .. 2023. 6. 30.
Coroutine Flow(1) - Flow 란 Coroutine의 Flow는 데이터 스트림이며, 코루틴 상에서 리액티브 프로그래밍 지원 하기 위한 구성 요소이다. 이를 이해하기 위해서는 먼저 리액티브 (반응형) 프로그래밍이 무엇인지, 그리고 Flow가 리액티브 프로그래밍에 대응하여 어떠한 역할을 하는지를 알아야 한다. 리액티브 프로그래밍이란?리액티브 프로그래밍이란 데이터가 변경 될 때 이벤트를 발생시켜서 데이터를 계속해서 전달하도록 하는 프로그래밍 방식을 뜻한다.  기존 명령형 프로그래밍에서는 데이터의 소비자는 데이터를 요청한 후 받은 결과 값을 일회성으로 수신한다. 하지만, 이러한 방식은 데이터가 필요할 때마다 결과 값을 매번 요청해야 한다는 점에서 매우 비효율적이다. 리액티브 프로그래밍에서는 데이터를 발행하는 발행자가 있고 데이터의 소비자는 데이.. 2023. 6. 27.