Android

    [안드로이드를 위한 Coroutines] 책 소개

    들어가며 Kotlin Coroutines는 Kotlin을 위한 강력한 비동기 솔루션이다. 안드로이드 실무에서 한동안 높은 점유율을 자랑한 RxJava가 Coroutines로 대체 되었고, 새로 시작하는 안드로이드 프로젝트들은 대부분 Coroutines를 사용하고 있다. 안드로이드의 공식언어가 Kotlin인데, Kotlin의 비동기 솔루션으로 Coroutines가 채택되었으므로 이후의 동시성 프로그래밍은 Coroutines를 기반으로 만들어질 것임을 알 수 있다. Coroutines의 강점 Coroutines가 Kotlin의 주요한 비동기 솔루션이 될 수 있던 이유는 Coroutines의 성능, 안정성 때문이다. Coroutines는 기존 비동기 라이브러리들이 채택한 스레드와 스레드풀 기반 비동기 프로그래..

    [안드로이드를 위한 Coroutines] 안드로이드의 멀티스레드 프로그래밍 : 기존의 Thread 기반 멀티스레드 프로그래밍 방식과 한계점

    [안드로이드를 위한 Coroutines] 안드로이드의 멀티스레드 프로그래밍 : 기존의 Thread 기반 멀티스레드 프로그래밍 방식과 한계점

    안드로이드와 멀티스레드 프로그래밍 안드로이드는 메인 스레드라 불리는 UI 스레드에서 모든 UI 관련 작업들을 처리한다. 만약 메인 스레드가 서버와의 네트워크 통신이나 데이터베이스 읽기/쓰기 작업들에 의해 길게 점유된다면 안드로이드 앱은 버벅이거나 멈추게 된다. 안드로이드를 개발하는 사람이라면 누구나 겪어보는 오류인 ANR(Application Not Responding)은 앱이 입력된 이벤트에 5초 이내에 응답하지 않는 경우에 일어나는데, 이 또한 메인 스레드를 길게 점유하는 작업이 원인이다. 이를 해결하기 위해 개발자들은 메인스레드 외에 새로운 스레드를 만들어 해당 스레드에서 길게 걸리는 작업을 처리한다. 이를 여러개의 스레드를 사용한다 해서 멀티스레드 프로그래밍이라 한다. 멀티 스레드 프로그래밍을 사..

    [Unit Testing] Android의 정적 메서드를 사용하거나 Android 전용 클래스를 사용하면 테스트에 실패하는 이유 알아보기

    [Unit Testing] Android의 정적 메서드를 사용하거나 Android 전용 클래스를 사용하면 테스트에 실패하는 이유 알아보기

    Unit Test와 Android Framework Android 개발자들에게 Test가 어렵게 다가오는 이유 중 하나는 안드로이드에서는 조금만 잘못해도 테스트가 실패하기 때문이다. 이번 글에서는 대부분의 안드로이드 개발자들이 겪는 안드로이드에서 테스트가 실패하는 이유 두가지와 해결 방법에 대해 알아볼 것이다. 안드로이드에서 테스트가 실패하는 케이스 안드로이드에서 안드로이드로 인해 테스트가 실패하는 케이스는 두가지이다. 바로 안드로이드에서 제공하는 정적 메서드를 사용하는 경우와, 안드로이드 전용 클래스를 사용하는 경우이다. 이들 각각에 대한 테스트를 작성해보고 왜 실패하는지 이유와 해결책을 알아보자. 안드로이드에서 제공하는 정적 메서드 테스트 해보기 예를 들어 유저가 가입할 때 id가 유효한지를 확인하는..

    [Unit Testing] Android Context 객체를 사용하는 클래스 테스트하기

    [Unit Testing] Android Context 객체를 사용하는 클래스 테스트하기

    Android와 Context 객체 Android에서 Context 객체는 God Object(신 객체)이다. Context 내에는 무수히 많은 책임과 메서드가 있다. 이 때문에 많은 개발들이 만약 context 객체가 있다면 테스트 하기 어렵다고 생각한다. 하지만 이는 틀렸다. Context 자체를 테스트 하는건 어렵지만, Context를 포함하는 객체를 테스트 하는 것은 가능하다. 아래에서 리소스를 가져오는 클래스인 ResourceRetriever 클래스를 사용해 Context를 테스트 하는 방법에 대해 살펴보도록 하자. 테스트 환경 설정 예를 들어 아래와 같은 ResourceRetriever 클래스가 있다고 해보자. 이 클래스는 안드로이드에서 리소스를 가져오는 역할을 한다. class Resourc..