코루틴

    [Kotlin] 코틀린에서 RxJava와 Coroutine

    위 두 라이브러리는 비동기 작업을 구현하는 방법으로 여기저기서 많이들 사용한다. 코틀린의 경우 RxJava와 Coroutine 모두 사용 가능하고, 두 방식을 혼합하여 사용할 수도 있다. 먼저 간단하게 두 방식 사용 방식 차이점에 대해 알아보자. RxJava RxJava는 Observable Pattern, Iterator Pattern, Functional Programming을 결합한 형태로 데이터를 관찰 가능한 stream 형태로 받을 수 있다. 그렇기 때문에 중간중간마다 데이터의 변화를 확인할 수 있다. RxJava를 사용하기 위해서는 반환값으로 Single 클래스를 사용해야 한다. interface UserService{ @GET("/users) fun getUser(): Single @GET(..

    [Kotlin] Coroutine 동기화 처리

    멀티 스레드 처리는 애플리케이션의 퍼포먼스에 큰 이점을 주지만 경쟁 상태(race condition)를 적절히 조절해 주지 않는다면 데이터의 손실을 야기할 수 있다. - 경쟁 상태란 여러 개의 스레드가 하나의 공유/변경 가능한 자원에 접근하는 것을 말한다. 자세히 보기 데이터 손실을 막기 위해서는 동기화(synchronization)를 통해 race condition을 제어하여 올바른 멀티 스레드 환경을 구축해야 한다. 그러기 위한 여러 방법 중 하나로 Mutex를 고를 수 있다. Mutex Mutex는 공유자원에 변경이 일어나는 순간 적절한 block을 통해 race condition을 제어하는 동기화 제어 기법이다. 코드가 임계 구역에 있는 경우 절대로 동시성이 발생하지 않게 하고 오직 하나의 루틴만..