Kotlin 5

RxJava 적용기

RxJava는 러닝커브가 다소 있는 것으로 알려져 있다. coroutine+suspend fun 와 비교해서 높은 수준의 작업을 실시간으로 처리할 수 있고, coroutine Flow 와 비교해서 더 안정적인 프로그래밍을 할 수 있다는 장점으로 인해 배울 가치는 충분한 것 같다. 배워야할 개념도 많고 빠른 기간 내에 전부 이해할 것은 기대하지 않지만 LiveData에서의 observe, Flow에서의 일부 오퍼레이터 경험(맛보기) 이 있으니 어느정도는 유리하게 시작할 수 있지 않을까?ㅎㅎ 차근차근 시작해보자 중요한 개념 Observable / Observer RxJava에서는 Observable을 구독하는 Observer가 존재하고, Observable이 순차적으로 발행하는 데이터에 대해서 반응한다. o..

Programming/Android 2021.10.03

Android Jetpack Paging 3 적용하기

아래는 공식문서의 Paging 3 개요 일부이다. `Repository` 에서는 PagingSource와 RemoteMediator 둘 중 하나를 쓰면 된다고 이해했다. 이중에서 나는 PagingSource를 사용했다. 하지만 만약 네트워크 연결이 불안정하거나 오프라인 상태에서도 데이터를 로드하기 위해서라면 RemoteMediator가 적절하다. `ViewModel`에서는 Pager() 를 통해 PagingSource 객체를 생성하고 이를 UI(Activity등) 에서 반응할 수 있게 한다. 'PagingDataAdapter`는 RecyclerView에서의 Adapter + ListAdapter 를 상상하면 된다. 1. PagingSource 코드는 아래와 같다. load()에서는 네트워크 통신을 포함한..

Programming/Android 2021.09.03

코루틴은 race condition이 발생하지 않는 것일까?

C, JAVA의 멀티 쓰레드에서 비동기 처리에서는 공유변수에 대한 접근제어를 해왔었다.(세마포어, 뮤텍스, synchronized , etc.) 동기화 제어를 제대로 하지 않으면 원자성에 위배되어, 변경된 데이터의 손실이 일어날 수 있다. 그런데 코틀린 코루틴에 대해 배우면서 아직까지 race condition에 대한 언급은 한 번도 못봤던 것 같다. 서로 다른 coroutineScope에서 공유 변수에 대한 update가 동시에 발생할 때 문제가 생길 가능성은 전혀 없는 것일까? 결론부터 말하자면 멀티스레드와 마찬가지로 동기화 제어를 해주어야 한다. 각 쓰레드는 JVM의 Stack 영역을 차지하고, 코루틴은 각각의 작업이 Object로 할당되어 JVM의 Heap에 적재된다. 하지만 Heap영역이라고 해..

Programming/Android 2021.06.16

String vs StringBuilder vs StringBuffer

Java/Kotlin에서 문자열을 다루는 클래스로 String, StringBuilder, StringBuffer가 있다. 각각의 특징이 차이가 있으니 적재적소에 사용할 수 있도록 분석해보았다. String String 과 StringBuilder/StringBuffer와의 큰 차이는 String은 immutable 하고, StringBuilder/StringBuffer는 mutable하다는 것이다. 예를 들어 String str = "Good" 또는 var str : String = "Good" 이라고 했을때 str += " Morning" 을 하게 되면 str 은 "Good Morning"을 가리킨다. 그러나 내부적으로 봤을 때 "Good" 메모리 영역 뒤에 "Morning"이 단순히 합쳐진 것이 아..

Programming/Kotlin 2021.05.14

Kotlin/Java의 Primitive type, Reference type

Android Programming에서 Kotlin/Java 언어에 대한 기본은 아무리 강조해도 지나치지 않다고 생각한다. Primitive type, Reference type의 혼동으로 놓치기 쉬운 이슈를 방지하는 차원에서 복습해보자. Kotlin을 들여다 보기전에 Java에 대해 먼저 짚고 넘어가자. Java Java의 자료형에는 크게 Primitive type과 Reference type이 있다. primitive type은 소문자로 시작하는 short, int, byte, char, long, float, double 등이 있다. reference type은 이를 제외한 대분자로 시작하는 String, ArrayList, Class type 등이 있다. Java에서 함수를 호출할 때 매개변수가 ..

Programming/Kotlin 2021.05.03