본문 바로가기

프로그래밍 놀이터/Kotlin60

[Kotlin] Coroutine 소개 https://www.slideshare.net/elizarov/introduction-to-kotlin-coroutines -Coroutine 개념은 아주 오래된 녀석이다.Simula 67 이란 언어에서 처음으로 소개된 개념이다. detach : suspension statement resume : resume coroutine execution -Coroutine 은 multithreading 이 나오면서 잠시 out 되어있었다.그러나 최근에 async code 가 많이 사용되면서 다시 주목받기 시작했다. -Thread 는 resource 측면에서 high-load 이며,single thread 만 지원하는 언어들도 있으며,mutable state 가 많고, UI operation 같이 thread .. 2020. 8. 24.
[Kotlin] Coroutine 은 어떻게 동작하는가? 코루틴은 어떻게 동작하는가? -돼욍 CommentCoroutine 이 StateMachine 형태로 동작함을 rough 하게 이해할 수 있다.StateMachine 의 상태 변화에 따라 값을 save & fetch 한다는 것을 rough 하게 이해할 수 있다.Continuation 이라는 것을 재활용해 Dispatcher 를 포함한 context 를 계속 물고 갈 수 있음을 rough 하게 이해할 수 있다. -Kotlin 의 Coroutine 은 suspend 키워드로 마킹된 함수를 CPS(Continuation Passing Style)로 변환하고, 이를 Coroutine Builder 를 통해 적절한 스레드 상에서 시나리오에 따라 동작하도록 구성된다. -suspend function 은 스레드와 스케.. 2020. 8. 23.
[coroutine] java.lang.IllegalStateException: Module with the Main dispatcher is missing. Add dependency providing the Main dispatcher, e.g. 'kotlinx-coroutines-android' -coroutine 을 사용한 project 에서 release build (minify 포함) 을 하면 아래와 같은 exception 이 발생하며 crash 가 발생한다.java.lang.IllegalStateException: Module with the Main dispatcher is missing. Add dependency providing the Main dispatcher, e.g. 'kotlinx-coroutines-android’ -범인은 바로 proguard.proguard 파일은 version 에 따라 바뀔지 모르지만, 아래 링크를 참조하면 최신정보를 계속 얻을 수 있지 않을까 싶다. https://github.com/Kotlin/kotlinx.coroutines/blob/maste.. 2020. 8. 16.
[Kotlin] check lateinit is initialized (safely accessing lateinit vars) https://blog.jetbrains.com/kotlin/2017/09/kotlin-1-2-beta-is-out/ -Exception in thread "main" kotlin.UninitializedPropertyAccessException 위의 exception 을 마딱뜨린 사람이 은근 많을 것이다.그렇다 저 녀석은 lateinit 이라고 선언된 var 에 값이 assign 되기 전에 접근할 때 생기는 exception 이다. -Kotlin 1.2 에서 추가된 기능이 있는데, 바로 reflection 방식을 이용한 isInitialized 함수이다.lateinit var file:File // ... if (::file.isInitialized) { ... } -reflection 방식이기 때문에.. 2020. 8. 12.
[Kotlin] Kotlin 으로 build gradle 을 작성하자! https://proandroiddev.com/migrating-android-app-to-gradle-kotlin-dsl-1-0-c903760275a5 -gradle 4.9 이상 버전부터 사용 가능하다.Kotlin DSL 은 gradle build script 를 지원하는 kotlin 언어이다.( 기존에 우리가 쓰던 것은 groovy ) -Kotlin DSL 은 groovy 방식에 비해 IDE 에서 제공하는 다음의 기능들을 함께 제공한다. Auto-completionContent assistQuick documentationNavigation to source codeRefactoring and much more -android studio 도 최신 버전을 사용하는 것이 추천된다. -kts 는 Grad.. 2020. 8. 10.
[kotlin] safe when statement http://blog.karumi.com/kotlin-android-development-6-months-into-it/ - when 을 expression 으로 사용될 때에는 cover 하지 않는 케이스에 대한 else 가 꼭 필요하다. 하지만 statement 로 사용될 때에는 꼭 쓰지 않아도 괜찮다. (강요되지 않는다.) 이 때문에 모든 case 를 커버하는지 알 수 없었다. 아래와 같이 Any? 에 대한 extension 으로 exhaustive 를 줌으로써 expression 처럼 쓰도록 하여 에러를 줄일 수 있다. val Any?.exhaustive get() = Unit private fun onStatusChanged(status:Status){ when(status){ is Status... 2020. 8. 9.
[kotlin] Sealed class 를 이용하여 error 를 다루는 방법 https://articles.caster.io/android/handling-optional-errors-using-kotlin-sealed-classes/ - private fun parse(url:String): ParsedData{ val result = URL_PARSE_REGEX.find(url) if( result == null){ // what to do here? } val mimeType = result.groupValues[2] val data = result.groupValues[4] return ParsedData(data, mimeType) } data class ParsedData(val data:String, val mimeType:String) 위와 같은 코드가 있다. - .. 2020. 8. 8.
[Kotlin] Coroutine 에 대한 이해 : 기본 용어 및 사용 https://android.jlelse.eu/coroutines-basic-terminologies-and-usage-b4242bd1b2a4 Coroutine 이 뭐냐? -Coroutine 은 suspendable computaion instance 이다.코드 블럭이 life-cycle 을 가지고 생성되고 수행된다는 것이 개념상 thread 와 비슷하지만, 특정 thread 에 bound 되어 있지 않다.한 thread 에서 실행되고, 다른 thread 에서 resume 될 수도 있다.future 와 같이 result 나 exception 으로 종료될 수 있다. -Coroutine 은 lightweight thread 라고 볼 수 있다.여러개의 function 을 async 로 호출할 수 있고, 더 짧.. 2020. 8. 7.
[Koin] Koin 에 대해 알아보자 (tutorial) https://www.raywenderlich.com/9457-dependency-injection-with-koin Using Kotlin to Simplify DI - Koin 을 써야 하는 이유는 무엇일까? Koin 은 더 꽉 들어맞고, 더 직관적으로 쓸 수 있다. Dagger2 를 예로 들어보면, Dagger2 는 먼저 module, component, 그리고 inject annotation 들의 개념에 익숙해져야 한다. learning curve 는 매우 비싸다. (배우기가 어렵다는 이야기) 이 외에도 scope, subcomponent 들에 대한 추가 학습도 필요하다. 반대로, Koin 은 단순히 module 만 정의하면 된다. Koin Basics Koin 을 사용하기 위해서는 3가지 단계만.. 2020. 8. 6.