Without property delegationclass UserSettings( private val prefs: SharedPreferences) { var name: String get() = prefs.getString("name", "") ?: "" set(value) { prefs.edit { putString("name", value) } } var age: Int get() = prefs.getInt("age", 0) ?:0 set(value) { prefs.edit { putInt("name", value) } } } Using del..
Use case When we have filter/search functionality in our app, we often want to trigger an operation whenver user enters query in an EditText and we want to reduce network calls by using debouncing. Kotlin Flow supports debouce operation but it's still preview until 1.6. https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/debounce.html debounce debounce com..
It's cleaner and easier to handle not to throw Exception often in Kotlin. Particulary when we call Http call, we are like to use Coroutines. Coroutine has complicating cancellation and exception handling mechanism and it might not work well in caese if you use the same apporach to Java by throwing Exceptoin. Coroutine propagates Cancellation Exception to top most coroutine context and this makes..
코루틴이 무엇인지에 대한 정의는 인터넷에 넘쳐나기 때문에, 다시 추가적으로 설명하지 않으려고 한다. 다만 최근 구글에서 안드로이드 플랫폼에서 Concurrent job을 처리하기 위한 공식적인 방법으로 권장하기 시작했다는 점을 언급하고 싶다. 만약 코틀린으로만 된 프로젝트라면 RxJava나 다른 솔루션보다는 코틀린에서 제공하고 구글이 공식적으로 인정한 코루틴을 사용하는 것이 자연스러운 선택이라고 할 수 있을 것 같다. 그럼, 코틀린은 어떤 모습이고, 왜 cocurrent job을 처리하는데 좋다고 할까? 먼저, 자바의 Thread에 대해 간략히 살펴보기로 하자. Thread 의 제약점을 통해 왜 코루틴이 유용한지 이해하는데 도움이 될 것이다. fun main() { new Thread() { printl..
요즘 Coroutines는 좀 더 심도있게 공부하기 위해 온라인 강좌를 듣고 있는 중이다. 강좌가 진행되면 될수록 드는 생각이지만 Kotlin Coroutines는 생각만큼 단순하지 않다는 것이다. 아니 상당히 까다로운 프레임웤이라는 것이다. 주된 이유는 내부 메카니즘의 복잡함에 있다고 할 수 있는데, 특히 Cancellation과 Exception Handling으로 들어가면 직관적이지 않은 동작 때문에 Coroutines가 어떻게 동작하는지 정확한 이해가 없을 경우 정말로 골치아픈 버그를 접하게 될 가능성이 많다는 점이다. 예를 하나만 들어보자. class CoroutineTest { @Test fun exceptionTest() { runBlocking { val scopeJob = Job() va..
startActivityForResult를 사용할 때, 아래처럼 바로 결과를 받아오면 코드가 더 간결하고 읽기 쉬워질 거라는 생각을 여러번 했었다. val intent = Intent(this, AnotherActivity::class.java) val activityResult = startActivityForResult(intent) if (activityResult.resultCode = Activity.RESULT_OK) { //doSomething() } Coroutines에서 지원하는 CompletableDeffered란 녀석을 이용하면 위와 같은 순차적인 코드가 가능해 진다. Activty에 다음 코드를 추가한다. class DefferedActivity: AppCompatActivity()..
Kotln, Modern Programming Lauage Kotln, Modern Programming Lauage Kotlin이 뭐죠? Kotlin 은 자바의 가상머신 (JVM) 위에서 돌아가는 프로그래밍 언어입니다. Jetbrain이라는 IntelliJ, Android Studio와 같은 IDE를 만드는 회사에서 자바가 하기 힘든 기능들을 지원하기 위해서 만들어진 언어입니다. Jetbrain 또한 기존의 시스템이 자바에 많이 의존하고 있었고 자바의 한계, NullPointer라던가 변수 등을 조작함으로써 데이터를 관리하는 Mutability 등을 극복하기 위해 만들어졌습니다. 실제로 자바의 언어적 한계로 인해 생산성도 떨어지게 되고 예기치않은 에러도 발생하기 쉬웠기 때문에 Jetbrain은 새로운 ..