IT/Kotlin

IT/Kotlin

[Kotlin/Coroutine] 7. Coroutine 작성시의 테스트와 디버깅

Coroutine의 유닛 테스팅 Coroutine의 suspend Function들은 runblocking 코드블럭으로 수행하면된다. 다만, 동적으로 Scope를 만드는 경우에는 Dispatchers를 parameter를 넘겨받는 ViewModel을 사용해야 한다. Android Architecture Component와 함께 사용 Android Architecture Component와 함께 사용하면, LifeCycle 관리등 장점도 많이 있지만, 주의해야할 점들도 있다. Andorid 특징을 고려해서는 Coroutine 코드는 Viewmodel에 놓는 것이 적합하다. Job Debug Mode Debug mode에서 Job을 toString하면, 아래와 같은 형식으로 나온다. “coroutine#1”..

IT/Kotlin

[Kotlin/Coroutine] 6. Coroutine의 Structured Concurrency(구조화된 동시성)

Structured Concurrency(구조화된 동시성) 누가 기존의 동작을 취소할 수 있는가? 해당 동작은 Application의 LifeCycle을 충분히 준수하는가? 예외가 발생하면 이를 누가 처리하는가? → 이에 대한 물음을 해소하기 위해 Coroutine은 Structed Concurrency를 내세운다. 이 개념을 베이스로 만들어진, Scope, launch나 async 블록을 사용하면, 개발자는 메모리 누수 및 동시성을 가진 Function들을 올바르게 처리할 수 있게 된다. 예시 GlobalScope.launch는 top-level Coroutine을 만든다. 비록 Light-Weight이기는 하나, 여전히 Memory를 비롯한 Resource를 사용한다. → 새롭게 luanch된 cor..

IT/Kotlin

[Kotlin/Coroutine] 5. Coroutine의 예외처리와 취소

예외 처리 CoroutineExceptionHandler ExceptionHandler는 Coroutine내의 코드 실행 중 발생하는 Exception을 처리할 수 있는 Handler이다. CoroutineExceptionHandler는 Coroutine(Job) 내부에서 오류가 발생했을 때, 에러를 처리할 수 있는 CoroutineContext이다. 따라서, CoroutineExceptionHandler를 통해, Exception이 왔을 때, 받은 Exception을 출력해준다. 위의 코드를 아래와 같이 수정하여 Exception을 Handling 할 수 있다. GlobalScope.launch(Dispatchers.IO + handler) { // 1 launch { throw Exception() ..

IT/Kotlin

[Kotlin/Coroutine] 4. Coroutine의 구성요소: Coroutine의 생성과 활용

Coroutine의 구성요소 Coroutine은 3가지 요소로 이루어져있다고 볼 수 있다. CoroutineScope Coroutine을 제어할 수 있는 범위, Coroutine이 활동할 수 있는 범위를 뜻하며, 여기서 제어는 어떤 작업을 취소하거나, 끝날 때까지 기다리는 것을 뜻한다. CoroutineContext Coroutine이 실행된 Context로 Coroutine의 실행 목적에 맞게, 실행될 특정 Thread Pool 지정 Builder Coroutine을 실행하는 함수. 종류로는 위에서 언급한 launch, async등이 있다 CoroutineScope Coroutine의 실행되는 범위로 Coroutine 블록을 묶음으로 제어할 수 있는 단위이다. 모든 Coroutine은 Scope 내에서..

Hodie!
'IT/Kotlin' 카테고리의 글 목록