Kotlin

    [Coroutine] 9. Coroutine Job에서 Exception이 발생했을 때 Exception Handling을 하는 방법

    이번 글에서는 Job의 Exception을 Handling하는 방법을 살펴볼 것이다. Exception을 Handling하는 방법은 invokeOnCompletion을 이용한 방법과 CoroutineExceptionHandler 을 이용하는 방법 이 있다. 먼저 invokeOnCompletion을 사용하는 방법을 살펴보자. invokeOnCompletion을 이용한 Exception Handling 앞서 7번 글에서 다웠던 invokeOnCompletion을 코루틴 내부에서 애러가 발생했을 때도 사용할 수 있다. 아래와 같이 invokeOnCompletion을 사용해 Exception을 Handling할 수 있다. suspend fun main() { val job = CoroutineScope(Disp..

    [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] 2. Coroutine 안드로이드에서 사용하기

    Coroutine with Kotlin 코틀린에서 코루틴의 기능이 언어 내에 내장되어 있다. 따라서 코틀린을 사용하도록 Gradle을 설정한다면 별도의 설정 없이 일반적인 코루틴을 사용할 수 있게 된다. 하지만, 안드로이드에서 코루틴(Coroutine)을 사용하기 위해서는 안드로이드의 런타임을 위한 라이브러리를 세팅해주어야 한다. Android App 수준 모듈에 추가해야 할 라이브러리 두 개의 라이브러리(coroutine-core, coroutine-android)를 앱 수준의 gradle에 세팅하면 안드로이드에서 코루틴을 사용하기 위한 기본적인 세팅이 완료된다. coroutines-core 라이브러리는 코루틴을 사용하기 위한 공통적인 라이브러리이다. 보통의 어플리케이션의 경우 이 라이브러리만 있으면 ..

    Gradle with Kotlin DSL

    예제파일 : https://github.com/seyoungcho2/GradleKotlinDSL Gradle with Kotlin DSL Groovy로 빌드 파일을 작성하는 것은 불편하다. 다른 곳에서 선언된 변수에 대해 자동완성이 지원되지 않고 문서 찾기가 어렵다. 실행시점 전까지 오류가 검출되지 않는다. IDE에서 제공하는 리펙터링 기능을 사용할 수 없다. (Intellij 기준 Shift+F6 을 눌러서 리펙토링 불가) 코드 작성이 제약이 약해 빌드 스크립트가 자유 분방해진다. Groovy는 같은 코드를 여러 방식으로 쓰는 것을 허용한다. 대표적 예로 문자열을 쓸 때 ' 를 쓰는 것과 "를 쓰는 것이 모두 허용되는 점이다. 왜 Kotlin DSL로 이전해야 하는가? 코드 자동완성과 참조 오류코드 강..

    Gradle을 Groovy에서 Kotlin DSL로 Migration 하기

    익숙하지 않은 Groovy언어로 BuildScript를 작성하는 것에 한계를 느껴 언젠가는 Kotlin DSL로 Migration해야 겠다고 생각했는데, 이번에 시간이 생겨 Migration을 진행하였다. Migration을 진행하면서 달라진 문법 구조로 인해 대형 프로젝트에서는 Migration을 진행하기 조금 어려울 수도 있겠다는 생각이 들어 정리를 할 필요성을 느끼게 되어 정리를 하게 되었다. 프로젝트 예제: https://github.com/seyoungcho2/GradleKotlinDSL seyoungcho2/GradleKotlinDSL Contribute to seyoungcho2/GradleKotlinDSL development by creating an account on GitHub. g..