Android/Flow13 [Android] SharedFlow와 StateFlow Flow의 한계Flow는 Kotlin에서 비동기적인 데이터 스트림을 처리하기 위해 사용되는 라이브러리입니다. 데이터를 비동기적으로 처리하고 연속된 값을 스트림 형태로 표현하는 데 유용합니다. 하지만 Flow는 데이터를 저장하는 기능을 제공하지 않기 때문에, 상태나 이벤트를 관리하려면 별도의 데이터 홀더를 만들어야 합니다. 즉, Flow는 데이터를 저장하는 것이 아니라 데이터의 흐름(Stream)을 관리하는 역할만 합니다. 이러한 한계를 해결하기 위해 Kotlin에서는 StateFlow와 SharedFlow라는 특별한 Flow가 등장합니다.StateFlow는 상태(State)를 관리하는데 사용되며, SharedFlow는 이벤트(event)를 처리하는데 적합합니다. 우리는 애플리케이션을 개발할 때 필연적으.. 2025. 2. 17. [Android] Cold Flow와 Hot Flow 생산자 소비자 패턴을 이용한 자료구조인 Observable이나 Flow는 안드로이드 개발자라면 접하게되는 자료구조입니다.여기서 중요하게 여기지는 개념이 Cold Stream과 Hot Stream입니다. Cold Stream이냐 Hot Stream이냐에 따라서 동작방식이 완전히 다르기 때문에 분명이 알고 사용해야합니다. 우선 flow와 channel를 통해 간단하게 cold stream(flow)과 hot stream(channel)에 대해서 알아보겠습니다. Cold Stream, Hot Stream은 CD Player와 Radio다.Cold Stream과 Hot Stream의 차이점은 3가지로 말할 수 있습니다.1. 데이터가 생성되는 위치2. 생산자가 발행한 데이터를 동시에 여러 소비자들이 수신할 수 있.. 2025. 2. 17. [Android] ChannelFlow와 CallbackFlow ChannelFlowChannelFlow는 여러 코루틴에서 동시에 데이터를 보낼 수 있도록 설계된 Flow입니다. channelFlow는 내부적으로 channel을 생성하는 ProducerScope를 파라미터로 받아 동작하며,이를 통해 SendChannel을 사용하여 데이터를 송신하는 coldFlow를 생성할 수 있습니다.즉, send 및 trySend를 사용하여 channelFlow 내부의 channel을 통해 값을 송신할 수 있습니다. ChannelFlow는 CannelFlowBuider를 통해 Flow를 생성하며, 내부 구현은 다음과 같습니다. 기본적으로 버퍼가 포함된 채널이 사용되며, 기본 버퍼 크기는 64개입니다.또한, onBufferOverFlow의 기본 값은 BufferOverflow.SUP.. 2025. 2. 16. [Android] 코루틴 Flow를 활용한 성능 개선 - 다중 요청 처리 (flatMapMerge) Kotlin의 코루틴을 이용한 비동기 프로그래밍은 성능을 크게 향상시킬 수 있는 강력한 도구입니다. 특히 Flow를 활용하여 여러 요청을 동시에 처리하는 방식은 효율적인 비동기 처리를 가능하게 합니다. 이 포스팅에서는는 Flow를 사용하여 다중 요청을 처리하는 방법과 이론적 배경, 그리고 이를 사용할 때 주의할 점에 대해 다루겠습니다.시나리오 300ms가 발생하는 API 요청을 100번 반복하는 시나리오를 가정해봅시다. 동기적으로 처리하면 100번의 요청을 처리하는 데 30초가 걸립니다.class OrderClient { fun getOrder(orderRequest: OrderRequest): ResponseResult { return runBlocking { delay(30.. 2025. 2. 16. [Android] 플로우(Flow)의 Operator Flow의 수집(Collect) 최적화 병합 (conflation)어떤 플로우가 연산의 일부분이나 연산 상태의 업데이트를 방출하는 경우 방출되는 각각의 값을 처리하는 것은 불필요 하며, 대신에 최신의 값 만을 처리하는 것이 필요할 것입니다. 한 번 시작된 데이터 소비는 끝날 때 까지 하고 데이터 소비가 끝난 시점에서의 가장 최신 데이터를 다시 소비하는 것입니다., conflate 연산자를 사용하여 수집기(collector)의 처리가 너무 느릴 경우 방출 된 중간 값들을 스킵 할 수 있습니다.val time = measureTimeMillis { foo() .conflate() // conflate emissions, don't process each one .collect .. 2025. 2. 15. [Android] 플로우(Flow)란? - Deep Dive Asynchronous Flow우리는 어떤 연산을 수행한 후 하나의 값을 반환하는 중단 함수를 정의하고 이를 비동기로 수행 할 수 있습니다. 하지만 어떤 연산 후 두 개 이상의 값을 반환하는 중단함수는 어떻게 만들 수 있을까요? 코틀린 플로우(Kotlin Flow)를 이용하면 이를 수행할 수 있습니다. 코루틴 플로우를 사용하여 연속적인 데이터 스트림을 구현하기 위해서 필요한 것은 아래의 3가지가 있습니다. Producer(생산자)Intermediary(중간 연산자) - 선택사항Consumer(소비자) Android에서 클린아키텍쳐 계층의 Datasource는 일반적으로 UI 데이터 생산자입니다. 이때 사용자 인터페이스(UI)는 최종적으로 데이터를 표시하는 소비자입니다. 그렇지만 우리는 UI와 양방향적으.. 2025. 2. 15. 이전 1 2 3 다음