Coroutines/Coroutine Basics

    [Coroutine] 7. Coroutine Job 상태 관리하기 : New, Active, Completed, Cancelling, Cancelled

    Job의 상태 Job의 상태는 생성, 실행 중, 실행 완료, 취소 중, 취소 완료 총 5가지이다. 생성(New) : Job이 생성된다. 실행 중(Active) : Job이 실행 중이다. 실행 완료(Completed) : Job의 실행이 완료되었다. 취소 중(Cancelling) : Job이 취소되는 중이다. Job이 취소되면 리소스 반환 등의 작업을 해야 하기 때문에 취소 중 상태가 있다. 취소 완료(Cancelled) : Job의 취소가 완료되었다. 앞선 글에서 다룬 내용 : Job의 생성과 실행 앞선 글에서 우리는 Job의 생성과 실행을 다루었다. launch를 통한 Job의 생성 및 실행 launch에 CoroutineStart.LAZY 옵션을 추가하여 Job을 바로 실행되지 않게 만들기 Corou..

    [Coroutine] 6. Coroutine Job Lazy하게 생성 및 실행하기 : CoroutineStart.LAZY를 이용하여 Job을 Lazy하게 생성하기

    앞선 4번 글에서 코루틴 빌더인 launch 메서드를 사용했을 때 Job이 생성되는 것을 볼 수 있었다. Job은 결과가 없는 비동기 작업으로 예외가 발생하지 않는 이상 끝까지 수행되었었다. 이번 글에서는 Job 비동기 작업을 실행하는 시점과, 실행 방법을 조절하는 것에 대해 더욱 깊숙이 다뤄볼 것이다. Job의 생성 코루틴 빌더인 launch 메서드를 별도의 옵션 없이 사용하면 생성된 비동기 작업(Job)은 생성 후에 바로 실행된다. val job = CoroutineScope(Dispatchers.Main).launch { println(1) } // 1 출력 예를 들면 위와 같이 Job을 생성할 경우 이 Job은 생성과 동시에 실행된다. 이러한 방식으로 Job을 생성하면 필요한 위치에 바로 생성해서..

    [Coroutine 부록] 1. Kotlin main 함수를 Coroutine을 사용하기 위한 suspend fun으로 만들기

    프로세스의 시작점 main 함수 main 함수란 모든 프로세스의 시작점이다. 보통의 프로그램은 main함수에서 시작해서 main함수가 끝나면 종료된다. main함수를 실행하는 스레드가 Main Thread이며, main함수는 마지막줄이 실행되면 종료된다. 안드로이드와 같은 프레임웍은 이러한 main함수를 프레임웍 단에서 제어하기 때문에 직접 제어할 기회가 없지만, 이는 프로그래밍에 매우 중요한 포인트이기 때문에 알고 있어야 한다. 예를 들어 위와 같은 코드를 실행하면 다음과 같은 결과가 나온다. main 함수 입니다. Process finished with exit code 0 자 이제 그림2와 같은 코드를 실행해보자. 그림2에서는 Main Thread가 아닌 IO Thread에 println을 하도록 ..

    [Coroutine] 5. suspend fun의 이해

    일시중단 가능한 코루틴 코루틴은 기본적으로 일시중단 가능하다. launch로 실행하든 async로 실행하든 내부에 해당 코루틴을 일시중단 해야하는 동작이 있으면 코루틴은 일시 중단된다. 예시로 보는 일시중단 일시 중단 가능하다는 것이 무엇인지 알기 위해 을 보자. 위 그림을 코드로 표현하면 다음과 같다. 주석의 숫자와 그림1의 숫자를 일치하도록 하였다. fun exampleSuspend(){ val job3 = CoroutineScope(Dispatchers.IO).async { // 2. IO Thread에서 작업3를 수행한다. (1..10000).sortedByDescending { it } // 5. 작업3가 완료된다. } val job1 = CoroutineScope(Dispatchers.Main..

    [Coroutine] 4. Dispatcher과 launch, async를 이용해 Coroutine 붙이기

    앞선 글까지 Dispatcher을 만드는 과정을 거쳤다. 이제부터 본격적으로 Coroutine을 만들기 시작할 것이다. Dispatcher에 Coroutine 붙이기 Dispatcher에 Coroutine을 붙이는 작업은 launch{ }와 aync{ } 두가지 메서드를 통해 가능하다.결과 반환이 없는 단순 작업에는 launch를 결과 반환이 필요한 작업에는 async를 사용한다. 결과 반환 반환타입 launch X Job async O Defered 결과를 반환하지 않는 launch launch는 결과를 반환하지 않고 launch 수행 시 job이 반환된다. with(CoroutineScope(Dispatchers.Main)) { val job: Job = launch { println(1) } } 결..