안드로이드/Coroutine5 Coroutine 예외처리 일반적인 예외처리 일반적으로 예외처리는 try ~ catch 구문을 이용해서 처리할 수 있습니다. 또한, 코틀린에서는 runCatching ~ onSuccess ~ onFailure 구문으로 처리 가능합니다. 위처럼 코드를 작성하면 예외처리를 할 수 있지만, try ~ catch 혹은 runCatching ~ onSuccess ~ onFailure 구문이 반복되어 보일러 플레이트 코드를 작성하게 된다. 위와 같은 문제를 해결하는 방법은 코루틴의 SupervisorJob 이다. SupervisorJob SupervisorJob은 Coroutiine Child(코루틴 하위)에서 발생하는 Exception을 부모로 전파하지 않고 무시하도록 해준다. 왜 A만 출력되고 B와 C는 출력되지 않았을까? -> erro.. 2023. 3. 8. Coroutine Flow Flow Coroutine의 suspend 함수는 비동기적으로 하나 값을 반환합니다. 그리고 지속적으로 혹은 한 번에 여러개의 값들을 반환하는 경우를 대응하기 위해서 Coroutine의 비동기 스트림 API flow를 사용합니다. Coroutine Flow를 이용해서 연속적인 데이터 스트림을 구현하기 위해서는 Producer(생산자), Intermediary(중간 연산자), Consumer(소비자) 3가지가 필요합니다. Producer 1. flow { } 블록 안에서 비동기로 동작 2. 날씨 정보를 서버로부터 받아온다. 3. Producer가 데이터를 방출한다.(emit) 4. 2~3번의 과정을 60초마다 반복한다. Intermediary 1. Produce에서 생성한 값에서 필요한 형태로 변환한다. .. 2023. 2. 13. 동시성에 대하여...feat 코루틴 앱을 막힘없이 효율적으로 동작시키기 위해서는 어떻게 해야할까요? 사람이 물체를 인지하는 과정은 눈이 보내는 신호를 뇌가 받아들이는 구조입니다. 그리고 빠르게 보여지는 연속적인 이미지를 인식하는데에는 한계가 있습니다. 보통 사람은 초당 60프레임의 연속된 움직임과 그 이상의 프레임의 움직임의 차이를 느끼지 못한다고 합니다. 1000ms / 60frames = 16.666..ms/frame 따라서, 사용자가 스마트폰의 화면에서 움직임이 부드럽다고 느끼도록 하기 위해서는 16ms마다 한 프레임을 그리는 작업(통신, 렌더링, 입력 ,처리)을 완료해야합니다. 하지만, 앱에 필요한 적업 중에서 16ms보다 긴 처리 시간을 요구하는 작업(네트워크 통신, 데이터베이스 작업, JSON 파싱) 등이 있습니다. 다. 이 긴.. 2023. 2. 10. [안드로이드] Coroutine의 Dispatchers.IO 와 Dispatchers.Default의 차이 Dispatcher는 코루틴에서 특정 스레드를 실행할 수 있도록 해주는 기능을 합니다. (RxJava의 subscribeOn()과 동일한 기능) 네트워크 입출력이 필요한 작업에사용할 수 있는 스레드가 IO와 Default 두 가지 입니다. 그렇다면 두 개의 차이점이 무엇인지 알아보면, Dispatchers.IO : 필요에 따라 추가적으로 스레드를 더 생성하거나 줄일 수 있으며 최대 64개까지 생성가능하다. Dispatchers.Default : Default 사용 시 JVM의 공유 스레드풀을 사용하고 동시 작업 가능한 최대 갯수는 CPU의 코어 수와 같다. (ex: CPU가 4코어이면 최대 4개의 병렬작업이 가능) 따라서, 이 둘의 용도가 다르다 IO의 경우 네트워크 대기시간이 네트워크 입출력 작업에 사.. 2022. 4. 12. [안드로이드] Coroutine Scope / Thread vs Corountine CoroutineScope - 코루틴의 범위, 코루틴 블록을 묶음으로 제어할수 있는 단위 - 액티비티의 생명주기에 따라 동작 GlobalScope - 앱의 생명주기와 함께 동작해서 실행 도중에 별로도 생명주기를 관리해 줄 필요가 없다. 시작부터 종료까지 장기간 실행되는 코루틴 작업에 적합 - 싱글톤으로 동작 - CorountineScope를 상속받음 - cancel 처리가 복잡 ViewModelScope - Jetpack 아키텍처의 viewModel 컴포넌트를 사용시 ViewModel 인스턴스에서 사용하기 위해 제공되는 scope이다. viewModelScope로 실행되는 코루틴은 ViewModel 인스턴스가 소멸될 때 자동으로 취소됨 ViewModelScope LifecycleScope는 각 Lifec.. 2022. 4. 8. 이전 1 다음