Job

Language/Kotlin

Structured Concurrency in Coroutines

이번 글에서는 구조적 동시성(Structured Concurrency)의 특징을 정리해본다. 1. 모든 코루틴은 제한된 수명이 있는 위치에서 시작되어야 한다.가장 대표적인 예로 Activity가 될 수 있다. RxJava에서는 특정 시점에서 disposable을 모아 처리해야 하는데컴파일러는 개발자가 처리하는 코드를 작성하지 않아도 경고하지 않는다. 이렇게 clear 혹은 cancel의 과정이 없다면OOM(Out Of Memory) 에러 혹은 앱 크래시가 발생할 수 있을 것이다. 반면에 코루틴을 사용할 때 예시로 사용했던 코드를 보면 viewModelScope가 있다. 이 스코프는 ViewModel 수명에 엮여있다. 따라서 ViewModel이 수명에 따라 clear될 때,viewModelScope에서 실..

Language/Kotlin

CoroutineScope와 CoroutineContext 되짚어보기

CoroutineScope(이하 Scope)는 CoroutineContext(이하 Context)라는 하나의 프로퍼티를 가지고 있다. 더불어 모든 Coroutine은 특정 Scope에서 실행된다. 그리고 여러 개의 Coroutine은 같은 Scope에서 실행될 수 있다. 특정 Coroutine과 그 자식 Coroutine을같은 Scope에서 실행하게 되면 Job 객체들이 부모-자식 계층을 구성하게 된다. 이렇게 형성된 부모-자식 계층은 구조적 동시성에서 중요한 부분이다. 같은 Scope에서 실행된 Coroutine은기본적으로 해당 Scope의 Context를 상속받는다. 하지만 각 Coroutine은 다른 Context로 실행될 수 있고,이것도 계층 구조를 따라 특정 Coroutine이 A라는 Conte..

Language/Kotlin

CoroutineContext와 CoroutineScope 알아보기

이번에는 CoroutineContext는 대체 무엇인지 알아보자. 그리고 간단히 CoroutineScope 구조까지 살펴보도록 하겠다. viewModelScope로 찾아보기viewModelScope는 CoroutineScope라는 인터페이스를 상속받아 만들어진 녀석이다. 그리고 CoroutineScope 인터페이스를 확인해보자.보다시피 CoroutineContext를 가지고 있는 걸 볼 수 있다. 그리고 다시 한 번 CoroutineContext가 무엇인지 들어가보자.문서 최상단을 읽어보면 CoroutineContext는 여러 Context Element를 포함하고 있다는 사실을 알 수 있다. 여기서 가장 중요한 Element에는 바로 Dispatcher, Job, ExceptionHandler, Nam..

Language/Kotlin

Coroutine Builder 이해하기

우리는 지금까지 예제에서 코루틴을 실행할 때 async를 사용해 suspend function을 실행해왔다. 명확히 하자면 이번 제목이 코루틴을 실행하는데 필요한 녀석이다. 그래서 뭐임?Coroutine Builder(코루틴 빌더)는 새로운 코루틴을 만들기 위해 필요한 녀석이다. 총 3가지 빌더가 있고 launch, async, runBlocking이 있다. 먼저 launch를 사용해보려고 한다. launch 사용하기fun main() { launch {}} 단순히 이렇게 사용할 순 없다. launch는 최상위 함수가 아닌 CoroutineScope의 확장함수이기 때문이다. 이렇게 launch를 사용하려면 새로운 CoroutineScope가 필요하다. launch는 대체 어떤 경우에 사용하는 걸까? 코루..

BonusTrack02.dev
'Job' 태그의 글 목록