전체 글
-
코루틴 공식 가이드 정리하기_Part-6 (Exception Handling) Deep Dive+Coroutine/👩💻Basic 2023. 3. 15. 14:19
목차코루틴은 어떤 상태들을 가지고 있을까?코루틴 예외 다루기 코루틴은 어떤 상태들을 가지고 있을까? (코루틴 내부 상태 관리 알아보기)코루틴은 항상 특정 코루틴 스코프 내에서 실행된다. 코루틴 스코프에는 정의 된 스코프 내에서 실행되는 모든 코루틴들이 베이스로 사용할 코루틴 컨텍스트가 정의되어 있다. 코루틴 컨텍스트는 코루틴의 실행 환경 정보라고 할 수 있다. 결과적으로 코루틴 스코프는 코루틴들의 실행 환경에 대한 정의를 하고, 이 실행환경이 미치는 범위를 정의하는 것이라고 할 수 있다. 한편 이렇게 시실행되는 코루틴들은 코루틴 스코프 내에서 어떤 코루틴 빌더로 생성되었는지에 따라 "지연 실행"이나 "결과를 반환"하는 등의 여러가지 서로 다른 특성을 갖게 된다. 코루틴은 생성된 후 내부적으로 정..
-
코루틴 공식 가이드 정리하기_Part-6 (Exception handling)Coroutine/👩💻Basic 2023. 3. 15. 08:21
Part-6 (Exception handling)예외 전달 코루틴 빌더는 launch와 actor처럼 예외를 자동으로 전달하는 종류와, async와 produce처럼 사용자에게 의존하는 종류로 나눌 수 있다. 루트 코루틴(어느 코루틴의 자식도 아닌 코루틴)을 만들 때, launch 등은 예외를 Thread.uncaughtExceptionHandler에서 즉시 처리한다. 예외가 발생하면 자체적으로 처리한다는 뜻이다. 그러나 async 등은 부모에게 예외를 전달할 수 있을때까지 기다린다. await 등이 호출되기 전까지는 예외가 발생했는지 알려주지 않는다. fun main() = runBlocking { val job = GlobalScope.launch { // 루트 코루틴 prin..
-
Cold Stream과 Hot Stream에 대해서Coroutine/Flow (흐름) 2023. 3. 14. 10:52
Cold Stream과 Hot Stream에 대해서Cold Stream과 Hot Stream을 정의하려고 하면 많은 혼란이 있다. Cold Stream은 Flow, Hot Stream은 Channel 과 같은 명확한 정의를 내리고 싶지만, 막상 작업을 시작해보면 두 구성요소를 구분하는 경계가 명확하지 않다는 것을 알 수 있다. 스트림에는 두가지 유형이 있다. Cold Stream과 Hot Stream이다. #1. Cold StreamCold Stream에서는 모든 데이터가 스트림 내부에서 생성된다고 말할 수 있다. Cold Stream에는 구독자가 한명 뿐이며, 해당 구독자에게만 값을 전송한다. 또한 그 구독자는 스트림을 초기화하는 구독자이다. (Ex. collect()를 호출하는) 따라서 유니..
-
코루틴 공식 가이드 정리하기_Part-9 (Flow) Deep Dive+Coroutine/Flow (흐름) 2023. 3. 13. 16:40
목차StateFlow와 SharedFlow -> (따로 글 정리)코틀린 플로우 내부 살펴보기 1 (Cold Flow)코틀린 플로우 내부 살펴보기 2 (Hot Flow)콜드 플로우 효율적으로 사용하기 (Cold Flow) 코틀린 플로우 내부 살펴보기 1 (Cold Flow)요즘 많은 안드로이드 프로젝트들이 Java -> Kotlin 전환을 하면서 데이터 스트림 처리에 RxJava/Kotlin을 사용하던 부분들이 Coroutine Flow로 많이 전환되고 있다. RX에 비해서 내장 오퍼레이터 및 스트림 윈도우 컨트롤등의 자체 제공되는 기능이 많지 않지만 그 덕에 더 가볍게 사용할 수 있고, 오퍼레이터가 중단함수를 지원함으로써 더 직관적으로 스트림 체인을 구성할 수 있어 많이 이용되고 있다. (게다가 안..
-
StateFlow와 SharedFlow (상태 vs 이벤트)Coroutine/Flow (흐름) 2023. 3. 13. 07:13
StateFlow와 SharedFlow (상태 vs 이벤트)우리는 어플리케이션을 개발할 때 필연적으로 '상태'와 '이벤트'를 다루게 된다. 상태 (State) UI 어플리케이션에서 다루는 상태에 대해 생각해보자. 우선 사용자의 인증 상태를 생각해볼 수 있다. 사용자의 인증 상태는 크게 '로그아웃', '로그인', '계정 잠김' 등으로 정의될 수 있으며 반드시 한가지의 상태를 갖고 있다. 또 한가지는 화면에 표현하기 위한 데이터의 상태를 생각해볼 수 있다. 이는 '로딩중', '데이터 이용가능', '오류' 등으로 정의될 수 있으며 역시 반드시 한가지의 상태를 갖고 있다. 어플리케이션은 필요한 상태 머신을 정의하고, UI 변경이나 비즈니스 로직의 수행 등에 따라 상태를 변경해가며 실행된다. MVVM 아키텍..
-
코루틴 공식 가이드 정리하기_Part-5 (Coroutine Context and Dispatchers) Deep Dive+Coroutine/👩💻Basic 2023. 2. 16. 15:52
목차 콜백, 리액티브 그리고 코루틴 코루틴, 중단함수, 잡(Job) 이들의 관계는 무엇인가? 콜백, 리액티브 그리고 코루틴 코루틴은 그동안 우리가 비동기 처리를 위해 작성해왔던 코딩 스타일을 보다 직관적이고 안전하게 작성할 수 있도록 돕기 위해 고안되었다. 이번 파트에서는 '사용자 설정을 동기화' 한다는 가상의 시나리오를 설정하고 콜백 방식(쓰레드만 사용), 코루틴 방식으로 구현해보며 구현을 비교해본다. #1. Callback을 이용한 구현 먼저 가장 깊은 레이어인 DataSource 레이어를 살펴보자. interface UserSettingDataSource { fun loadUserSetting(userId: String, callback: Callback) fun updateUserSetting(u..
-
코루틴 공식 가이드 정리하기_Part-5 (Coroutine Context and Dispatchers) (+ 디버깅하는 법)Coroutine/👩💻Basic 2023. 2. 13. 16:17
Part-5 (Coroutine Context and Dispatchers) 코루틴은 항상 코틀린 표준 라이브러리에 정의되어 있는 CoroutineContext 타입의 특정 Context 안에서 실행되게 된다. Coroutine Context는 다양한 요소로 이루어져 있는데 가장 대표적인 것들로 Job과 Dispatchers 등이 있다. 먼저 Dispatcher의 사전적 정의는 다음과 같다. 뭔가 어떤 체계적인 시스템을 통솔하고 지휘하는 듯한 느낌이 든다. 그렇다면 Dispatcher에 대해 자세히 살펴보자. 디스패처 란? Coroutine Context는 Coroutine Dispatcher를 항상 포함하는데, 이는 해당 코루틴이 어떤 스레드 (혹은 쓰레드풀) 위에서 실행되게 할지를 명시해 줄 수 있다..
-
쓰레드와 코루틴 동작을 구별하기 (launch & runBlocking) in KotlinCoroutine/👩💻Basic 2023. 2. 9. 16:37
쓰레드와 코루틴 동작을 구별하기 (launch & runBlocking) in Kotlin 이 글은 해당 글을 번역하여 정리한 글이다. https://medium.com/mobile-app-development-publication/differentiating-thread-and-coroutine-launch-runblocking-in-kotlin-28219506c002 개인적으로 코루틴 함수의 동작에 대해 더 잘 이해할 수 있었던 좋은 글이다 :) 참고로 이 글을 이해하기 위해선 쓰레드의 run()과 start() 메소드에 대해 잘 알고 있어야 한다. 따라서 해당 내용에 대해 먼저 알아본다. 더보기 Thread를 start()으로 실행 vs Thread를 run()으로 실행 Thread 클래스의 내부를..