IT 이모저모

Android 8.0과 Reactive Extensions을 이용한 응용프로그램 개발 - 2

exien 2018. 3. 13. 10:11

Java / Android에는 개발에 도움을 주는 편리한 라이브러리들이 많이 있습니다. 본 앱은 개발의 편의를 위해 아래의 라이브러리를 사용합니다.


 - lombok

 - Timber

 - Lightweight-Stream-API

 - Rx Java2

 - Rx Android


이글을 쓴 시점에서 build.gradle 설정은 아래와 같습니다.


dependencies { 
    

    compileOnly 'org.projectlombok : lombok : 1.16.18' 
    annotationProcessor 'org.projectlombok : lombok : 1.16.18'

    compile 'com.jakewharton.timber : timber : 4.5.1'

    compile 'com.annimon : stream : 1.1.9'

    compile 'io.reactivex.rxjava2 : rxjava : 2.1.3' 
    compile 'io.reactivex.rxjava2 : rxandroid : 2.0.1'
      
    ... 생략 ... }

각 라이브러리는 다음과 같은 기능을 합니다.


쉽게 각 라이브러리의 편의를 제공합니다.

 - Lombok


@AllArgsConstructor @NoArgsConstructor @Data @Setter @Getter 등의 특수 기능을 제공하여 생성자와 getter / setter을 직접 만드는 수고를 덜어 줍니다.


 - Timber


여러 포맷과 호환되는 로깅 API를 제공합니다. 디버그 빌드에만 로그를 출력 하고, 릴리즈 빌드시에는 버그 트래킹에 필요한 로그만 출력하도록 쉽게 제어가 가능합니다.


 - Lightweight-Stream-API


Optional, Stram API 호환 API, java.util.function 패키지 호환 인터페이스를 제공합니다. 이외에도 Java 8 표준에서 제공하는 FunctionalInterface에 해당하는  ThrowableConsumer 인터페이스등을 제공합니다. ThrowableXXX 시리즈를 제공합니다.


 - RxJava2


Java에서 Reactive 프로그래밍을 위한 라이브러리입니다. RxJava의 2.x 버전에서는 Reactive Streams를 구현하고 있습니다. 자세한 내용은 RxJava2.x에 도입 된  Reactive Streams 을 참고 하면됩니다.


 - RxAndroid


RxJava2를 안드로이드에서 사용하기 위해 anroid.os.Looper에서 io.reactivex.Scheduler를 생성하는 API와 Android의 MAIN 스레드로 동작하는 Scheduler의 취득 API를 제공합니다.



먼저 만들고자 하는 앱의 완성 화면은 아래와 같습니다.




이 Fragment의 레이아웃은 아래와 같습니다.


화면 상단의 Pull To Refresh 의 UI를 구현하기 위해 SwipeRefreshLayout을 배치하였고, 그 내부에는 사용자 목록을 표시하는 RecyclerView를 배치하였습니다. 마지막으로 배치한 AppCompatTextView 는 사용자 목록이 비어있을때 메시지를 표시하는 View 입니다.

목록에 데이터를 표시하는 부분은 ListView에서 동일한 UI를 얻을 수 있지만, RecyclerView에는 ViewHolder 패턴을 전제로 구현되어 있어 쉽게 Adapter 클래스 애니메이션을 사용할 수 있습니다. Material Design을 구현하는 Design Support 라이브러리 같이 사용하도록 구현되어 있어 더 이상 ListView를 사용할 이유가 없습니다.


AppCompatTextView 뿐만 아니라 지원 라이브러리가 제공하는 표준 View 대체 클래스는 OS 버전 별로 새로운 기능을 사용할 수 있는 장점이 있기 때문에 적극적으로 사용하는게 좋다고 생각합니다.


이러한 View를 사용하기 위해서는 아래와 같은 라이브러리를 추가해야합니다.

 - support-v4

 - appcompat-v7

 - recyclerview-7


dependencies { 
    
    
    // Android Studio에서 생성 된 프로젝트라면 처음부터 설정되어 있습니다 
    implementation 'com.android.support:support-v4:26.1.0'
    
    compile 'com.android.support:appcompat-v7:26.1.0'
    
    compile 'com.android.support:recyclerview-v7:26.1.0'
    
    ... 생략 ... }