본문 바로가기

Android/Coroutine6

[Android/Coroutine] Cold Stream vs Hot Stream 쉽게 이해하기: 언제 어떤 것을 써야 할까? 코루틴을 사용하다 보면 Flow, StateFlow, SharedFlow와 같은 다양한 스트림 타입을 접하게 됩니다.이때 함께 따라오는 개념이 바로 Cold Stream과 Hot Stream입니다.처음에는 문서에 나와 있는 특징들을 정리하며 각각을 구분해보려 했지만,막상 실제 코드에 적용해 보려 하니 어떤 상황에서 무엇을 선택해야 할지 명확하게 감이 오지 않았습니다.그래서 이 개념들을 좀 더 쉽게, 감각적으로 이해할 수 있는 방법이 없을까 고민하게 되었고,그 과정에서 일상에서 흔히 겪는 상황들을 비유로 떠올려 보며 Cold Stream과 Hot Stream의 차이를 정리해 보았습니다.Cold Stream이란?Cold Stream은 collect가 시작되어야 비로소 동작하는 스트림입니다. 대표적으로 Kot.. 2025. 3. 28.
[Android/Coroutine] SharingStarted.WhileSubscribed(): 효율적인 Flow 공유 전략 Flow를 UI에서 구독할 때 불필요한 리소스 낭비를 방지하는 것이 중요합니다.SharingStarted.WhileSubscribed()를 사용하면 구독자가 있을 때만 데이터를 방출하고, 없으면 정지하는 방식으로 Flow를 최적화할 수 있다는 것을 알게 되었습니다.이번 글에서는 SharingStarted.WhileSubscribed()가 무엇인지, 그리고 어떤 상황에서 유용한지 공부한 내용을 정리해두겠습니다.1. SharingStarted란?SharingStarted는 Flow를 여러 곳에서 공유할 때 흐름을 언제 시작하고, 언제 중지할지를 결정하는 전략입니다.이를 활용하면 ViewModel에서 Flow 데이터를 공유하고, UI에서 구독할 때 불필요한 연산을 줄일 수 있습니다.SharingStarted .. 2025. 3. 20.
[Android/Coroutine] 구조화된 동시성이란? 구조화된 동시성은 코루틴에서 중요한 개념으로, 코루틴이 부모-자식 관계를 통해 체계적으로 관리되는 방식을 의미합니다.이를 통해 코루틴의 실행 흐름을 명확하게 제어하고, 예측 가능한 방식으로 동시 실행을 관리할 수 있습니다.또한, 특정 범위(Scope) 내에서 코루틴을 실행함으로써 오류 처리를 용이하게 하고, 불필요한 리소스 낭비나 메모리 누수를 방지할 수 있도록 돕습니다.1. 구조화된 동시성의 핵심 개념1) 코루틴 스코프 (Coroutine Scope)모든 코루틴은 반드시 코루틴 스코프 안에서 실행됩니다.코루틴 스코프를 사용하면 코루틴이 언제 시작되고 종료되는지를 명확히 제어할 수 있습니다.대표적인 코루틴 스코프는 다음과 같습니다.CoroutineScope: 개발자가 직접 생성하여 관리 가능GlobalS.. 2025. 3. 7.
[Android/Coroutine] launch vs async 차이점 정리 Coroutine에서 launch와 async는 모두 새로운 코루틴을 시작하는 데 사용되지만, 반환값을 처리하는 방식이 다릅니다.이 글에서는 공부한 내용을 정리하며, launch와 async의 차이를 코드 예제와 함께 살펴보겠습니다.1. launch: 결과를 반환하지 않는 Jobval job = GlobalScope.launch { delay(1000L) println("launch 완료!")}job.join() // 완료될 때까지 대기특징launch는 Job을 반환합니다.Job은 단순히 실행을 시작하고, join()을 호출하기 전까지는 실행 완료 여부를 기다리지 않습니다.launch는 비동기적으로 실행되지만, 결과 값을 반환하지 않습니다.즉, 실행은 하지만 결과를 받아서 처리하는 용도가 아닙.. 2025. 2. 19.
코루틴과 스레드, 그리고 프로세스: 그 유사성과 차이 운영체제를 공부하다 보면 자연스럽게 프로세스(Process)와 스레드(Thread)의 개념을 배우게 됩니다.최근 코루틴(Coroutine)을 공부하면서, 스레드와 비슷한 점이 많아 보이면서도 작동 방식에는 차이가 있다는 점이 흥미로웠습니다.특히, 운영체제에서 배운 프로세스와 스레드의 개념이 코루틴을 이해하는 데 큰 도움이 될 수 있다는 생각이 들어, 나중에 참고할 수 있도록이 세 가지를 비교하며 정리해 보았습니다.프로세스와 스레드 간단 정리프로세스(Process)란?실행 중인 프로그램을 뜻하며, 운영체제가 관리하는 독립적인 실행 단위입니다.각 프로세스는 자체 메모리(Code, Data, Heap, Stack)를 가지고 있으며, 다른 프로세스와 자원을 공유하지 않습니다.스레드(Thread)란?하나의 프로세.. 2025. 1. 24.
[Android/Kotlin] 코루틴: Kotlin에서 비동기 프로그래밍을 간소화하는 방법 코루틴(Coroutine)은 비동기 프로그래밍을 단순화하기 위해 코틀린(Kotlin)에서 제공하는 기능입니다.비동기 프로그래밍은 여러 작업을 동시에 진행할 수 있게 해주어, 애플리케이션의 효율성과 반응성을 향상시킵니다.하지만, 전통적인 방법으로 구현할 경우 코드가 복잡해지고, 에러 처리가 어려워지는 등의 문제가 발생할 수 있습니다. 코루틴은 이러한 문제를 해결하기 위해 등장했습니다.코루틴의 주요 특징은 다음과 같습니다.경량성(Lightweight): 코루틴을 사용하면 많은 수의 동시 작업을 생성할 수 있으며, 이는 전통적인 스레드를 사용하는 것보다 훨씬 적은 리소스를 사용합니다.비동기 코드의 단순화(Simplifying asynchronous code): 코루틴을 사용하면 비동기 코드를 동기 코드처럼 읽.. 2024. 5. 29.
반응형