본문 바로가기

Android/Kotlin11

Kotlin Result 에러 핸들링 Result와 runCatching은 오류를 처리할 수 있는 방법 중에 하나다. Result는 동작이 성공하든 실패하든 동작의 결과를 캡슐화해서 나중에 처리될 수 있도록 하는 것이 목적이다. 이 Result와 함께 사용할 수 있는 다양한 기능들이 표준 라이브러리에 추가되었다. Kotlin 1.3부터는 예외 처리를 위해 runCatching이라는 inline function도 제공된다. 함수형 프로그래밍 방식의 에러 처리도 가능하며 Coroutines에서 에러 처리를 할 때 구글이 권장하는 방식이기도 하다. Result와 runCatching 먼저 Result를 보면 이런 형태로 생겼다. runCatching은 이런 식으로 생겼다. Result와 runCatching을 보면 대충 어떤 느낌으로 동작할지는 .. 2021. 11. 7.
Kotlin (코틀린) Coroutine의 Flow 결합 방법 Kotlin(코틀린)의 Coroutine(코루틴)에는 Flow라는 것이 있다. Flow를 잘 모른다면 일단 RxKotlin에서의 Observable과 유사하다고 생각하면 된다. 이번 포스팅에서는 이러한 Flow들을 결합해서 사용하는 방법에 대해 정리할 예정이다. Coroutine은 Flow를 결합하기 위해 combine(결합), zip(압축), flattenMerge의 세 가지 연산자를 제공해준다. 이 세 가지에 대해 각각 알아보자. 결합 (Combine) 연산자 먼저 combine 연산자에 대해서 살펴보자. Flow의 extension 함수인데 결합을 위해 다른 Flow를 인자로 받는다. 두 번째 인자로는 람다 suspend 함수를 받는데, 두 Flow (기존 Flow와 인자로 준 Flow)에서 emi.. 2020. 6. 8.
Kotlin - Coroutine 추가 정리 3 [이전 글] 2020/05/27 - [Android/Kotlin] - Kotlin - Coroutine 추가 정리 1 2020/05/29 - [Android/Kotlin] - Kotlin - Coroutine 추가 정리 2 Callback 대신 Coroutine 쓰기 [Callback] Callback을 사용한 간단한 예시이다. Network Request를 하면 fetch를 하고, fetch가 완료되면 callback이 불리는 구조이다. callback은 받은 결과를 화면에 표시해준다. 이렇게 callback을 사용하면 fetch를 부르고 결과를 기다리거나 하지 않고 이와 상관 없이 networkRequest() 함수는 종료되게 된다. networkRequest() 함수 내에서 fetch 결과에 따라 .. 2020. 5. 31.
Kotlin - Coroutine 추가 정리 2 지난 글에 이어서 계속 작성해 본다. 지난 글 : 2020/05/27 - [Android/Kotlin] - Kotlin - Coroutine 추가 정리 1 구조적 동시성 앞선 글의 예시들을 보면, Coroutine도 결국 blocking 하고 coroutine이 끝날 때까지 기다리는 식의 전통적인 패턴인 것처럼 보인다. 자바에서는 일반적으로 쓰레드에 대한 참조를 유지하고 모든 쓰레드에 대해 join()을 호출해서 다른 쓰레드를 기다리는 동안 기본 쓰레드를 차단하는 방식으로 진행했다. Coroutine도 이와 비슷하게 처리를 할 수는 있지만 이렇게 예전과 같이 사용하는 방식을 사용하지는 않는다. Kotlin에서는 Coroutine을 계층 구조로 만들 수 있다. 그러므로 부모 Coroutine이 자식 Cor.. 2020. 5. 29.
Kotlin - Coroutine 추가 정리 1 Coroutine에 대해서 지난 번 포스팅 글보다 조금 더 상세하게 다시 정리해보려고 한다. 사용을 하다 보니 지난 번에 작성했던 것보다 더 디테일한 부분들도 있고 어떻게 동작하는 지도 더 알면 좋을 것 같아서이다. Coroutine에 대해 다시 한번 생각해보면, 이를 사용해서 callback의 사용을 줄이면서 더 한눈에 들어오게 사용할 수 있다는 장점이 있다. 다른 프로그래밍 언어(ex. javascript)에서의 async await라고 생각할 수도 있다. 비동기 처리 패턴 중의 하나인데, 기존의 비동기 처리 방식인 callback의 단점을 보완하여 더 깔끔하게 코드를 작성할 수 있다. Kotlin은 suspend 키워드를 사용해서 여러 라이브러리 함수와 함께 비동기 프로그래밍을 할 수 있도록 해준다.. 2020. 5. 27.
Kotlin : local, infix, inline functions, Operator Overloading Local Functions (지역 함수) 함수 안에서 scope 내에 지역 변수를 선언해서 사용할 수 있듯이 함수의 scope 내에서 지역 함수를 선언하여 사용할 수 있다. 당연히 해당 scope 밖에서는 지역 함수를 사용할 수 없다. 내부에서 사용할 때 선언하여 사용할 수 있다. [Code] [결과] Local Return [Code] 위의 코드를 실행하면 어떻게 될까? [결과] forEach문 안에서 return을 하면서 함수 return이 되어서 함수가 종료된다. 이때 forEach문 안에서만 return을 하려 했다면 return@forEach를 사용하면 된다. @ 뒤에 return 할 scope를 지정해주면 의도한 대로 사용이 가능하다. [Code] [결과] 아까와는 다르게 main 함수가 마.. 2020. 5. 25.