Kotlin

기존에 다른 코루틴에 보내진 작업의 결과를 수신하려면 다음과 같이 코드를 만들어야 했다 suspend fun main() { val deferred: Deferred = CoroutineScope(Dispatchers.IO).async { "Async Result" } val result = deferred.await() println(result) } Deferred로 결과값을 감싼 다음 await() 메서드를 통해 해당 값이 수신될 때까지 기다려야 한다. withContext를 이용한 비동기 작업 순차화 withContext를 이용하면 withContext의 두가지 특성 때문에 이러한 작업을 간단하게 만들 수 있다. withContext 블록의 마지막 줄의 값이 반환 값이 된다. withContext..
Deferred란 Deferred는 직역하면 연기라는 뜻을 가진다. "결과값 수신을 연기한다"라는 뜻인데, 이는 미래의 어느 시점에 결과값이 올 것을 뜻한다. Deferred의 의미와 같이 "Deferred는 결과값을 수신하는 비동기 작업" 이라고 정의될 수 있다. Deferred는 Job이다. public interface Deferred : Job { public suspend fun await(): T public val onAwait: SelectClause1 .. } Deferred는 결과가 있는 비동기 작업을 수행하기 위해 결과 값이 없는 Job을 확장하는 인터페이스이다. 즉, Deferred는 Job이며, 이로 인해 Deferred는 Job의 모든 특성을 갖는다. 8번 글이었던 Job의 상태..
이번 글에서는 Job의 Exception을 Handling하는 방법을 살펴볼 것이다. Exception을 Handling하는 방법은 invokeOnCompletion을 이용한 방법과 CoroutineExceptionHandler 을 이용하는 방법 이 있다. 먼저 invokeOnCompletion을 사용하는 방법을 살펴보자. invokeOnCompletion을 이용한 Exception Handling 앞서 7번 글에서 다웠던 invokeOnCompletion을 코루틴 내부에서 애러가 발생했을 때도 사용할 수 있다. 아래와 같이 invokeOnCompletion을 사용해 Exception을 Handling할 수 있다. fun main() = runBlocking { val job = launch(Dispat..
프로세스의 시작점 main 함수 main 함수는 모든 프로세스의 시작점이다. 보통 프로세스가 실행되면, 메인스레드에서 main 함수가 실행되며, main 함수의 실행이 끝나면 종료된다. 메인 스레드는 사용자 스레드 중 하나이며, 프로세스는 사용자 스레드가 모두 종료되면, 종료되는 특성을 가지기 때문에 메인스레드만을 사용해 실행되는 프로세스는 메인 스레드의 사용이 종료되는 지점(main 함수의 실행이 완료되는 시점)에 종료된다. 예를 들어 위와 같은 코드를 실행하면 다음과 같은 결과가 나온다. main 함수 입니다. Process finished with exit code 0 자 이제 그림2와 같은 코드를 실행해보자. 그림2에서는 Main Thread가 아닌 IO Thread에 코루틴을 실행 요청해 pri..
코틀린과 코루틴 코루틴은 코틀린 언어의 기본 기능으로 내장되어 있다. 따라서 별도 설정 없이도 코루틴을 위한 저수준 API를 사용할 수 있다. 하지만, 언어에 내장된 기능만으로는 launch나 async 같은 고수준 API는 사용할 수 없다. launch나 async 같은 고수준 API는 Jetbrains 사에서 배포한 kotlinx-coroutines 라이브러리의 기능으로, coroutine-core(org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3) 라이브러리에 대한 의존성을 설정해줘야 사용할 수 있다. 이를 위해서는 다음과 같은 블록을 build.gradle 파일에 추가해야 한다. dependencies { implementation 'org.jetbrai..
Dev.Cho
'Kotlin' 태그의 글 목록 (22 Page)