[Kotlin] Coroutine의 배신 최근에 Coroutine을 메인 프로젝트에 반영해서 썼습니다. "쓰레드 따위...개나 줘버려.."라는 생각으로 코루틴을 적용해 보니 신세계 입니다.지긋지긋한 콜백구조와 Thread safe를 신경써야 했던 부분들이 너무나도 손쉽게 해결되면서 "역시 사람은 배워야되"를 연발했었죠. 획기적으로? 줄어든 코드량과 더불어 복잡도가 떨어지는 코드등 장점도 많은 반면에, 개념을 모르면 리뷰도 못한다라는 막강한 단점까지 있습니다. 하여튼..코루틴을 적용해 보면서 겪었던 문제들을 나열해 보려 합니다.그리고 결론적으로 코루틴은 다음 프로젝트 부터는 사용하지 않는걸로 결정 내렸습니다. 정확하게 말하면 사용 못합니다.사용할때 신세계 였는데, 배포하고나서 crash난걸 보니..@.@ 장점은 찾아보면 다른 블로그에도 여기저기 .. 개발이야기/Kotlin 6년 전
[Kotlin] 코틀린 - 코루틴#5 - exception 이 글은 아래 링크의 내용을 기반으로 하여 설명합니다. https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md 또한 예제에서 로그 print시 println과 안드로이드의 Log.e()를 혼용합니다. Exception propagationCoroutine builder들을 Exception handling 측면에서 두가지 타입으로 나뉩니다.Exception을 외부로 전파(propagation) 시킴: launch, actorException을 노출(exposing)시킴: async, produce언뜻 보기엔 말장난 같습니다.fun main() = runBlocking { val job = GlobalScope.launch .. 개발이야기/Kotlin 6년 전
[Kotlin] 코틀린-코루틴#3 - suspending function의 구성 이 글은 아래 링크의 내용을 기반으로 하여 설명합니다. https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md 또한 예제에서 로그 print시 println과 안드로이드의 Log.e()를 혼용합니다. Sequential is default기본적으로 code는 sequential하게 수행됩니다. 이는 coroutine 내부에서도 동일하게 적용 됩니다. (당연하겠죠?)먼저 아래와 같이 시간이 걸리는 작업을 하는 의미있는 함수가 있다고 가정합니다.(remote service call이 될수도 있고, computation을 하는 작업일수도 있습니다.) 먼저, 예제에서 공통으로 사용하기 위한 suspend 함수를 생성합니다.susp.. 개발이야기/Kotlin 6년 전
[Kotlin] 코틀린 - 코루틴#2 취소와 Timeout 이 글은 아래 링크의 내용을 기반으로 하여 설명합니다. https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md 또한 예제에서 로그 print시 println과 안드로이드의 Log.e()를 혼용합니다.Cancelling coroutine executioncoroutine도 취소해야할 경우가 있습니다. backgroud 작업을 진행중에 페이지가 넘어가서 더이상 결과가 필요하지 않다면 취소해야 겠지요?이를 위해 launch function이 return하는 Job을 이용합니다. import kotlinx.coroutines.* fun main() = runBlocking { val job = launch { repeat(1000.. 개발이야기/Kotlin 6년 전