Top

RxJava Essentials [Rx자바로 배우는 리액티브 프로그래밍]

  • 원서명RxJava Essentials (ISBN 9781784399108)
  • 지은이이반 모르질로(Ivan Morgillo)
  • 옮긴이강경구
  • ISBN : 9788960778146
  • 15,000원
  • 2016년 01월 28일 펴냄
  • 페이퍼백 | 144쪽 | 188*235mm
  • 시리즈 : acorn+PACKT

책 소개

요약

Rx자바는 비동기 처리와 이벤트 기반의 프로그래밍을 위한 리액티브 익스텐션(Reactive Extension)의 JVM 버전이다. 이 책은 Rx자바를 배우면서 안드로이드 프로젝트에 빠르게 적용하고 싶은 독자를 위해 쓰여졌다. Rx자바의 기능을 Rx안드로이드 프로젝트를 통해 설명함으로써 Rx자바와 Rx안드로이드의 기능을 빠르게 습득할 수 있다. Rx자바를 경험하고 싶은 개발자에게 좋은 길잡이가 되어줄 것이다.

이 책에서 다루는 내용

옵저버(Observer) 패턴을 마스터하고 옵저버블(Observable) 객체와 시퀀스 생성

객체 리스트를 옵저버블 시퀀스로 변환

기존의 메소드를 리액티브 비동기 함수로 전환

필요한 값만 함수로 오도록 옵저버블 시퀀스 필터링

옵저버블 시퀀스를 새로운 시퀀스로 변환하거나 조작하는 방법

새로운 시퀀스를 만들기 위해 옵저버블을 결합, 병합, 연결

스케줄러를 이용한 손쉬운 멀티스레딩, 동시성 기법을 배우기 위한 안드로이드 메인 스레드와 비동기 태스크 배제

레트로핏(Retrofit) 옵저버블 응답을 이용해 원격 REST API와 통신

Rx자바 기반의 첫 안드로이드 앱 제작

이 책의 대상 독자

자바 개발 경험이 있는 독자라면 리액티브 프로그래밍은 프로그래밍 언어를 변경하도록 강요하지 않으면서도 백엔드 시스템에서 확장성과 동시성을 다루는 새로운 방법을 제공한다. 이 책은 Rx자바의 핵심을 배워 안드로이드 플랫폼의 한계를 극복하고, 이벤트 기반의 리액티브적이면서 매끄럽게 동작하는 안드로이드 애플리케이션을 개발하는 데 도움을 줄 것이다.

이 책의 구성

1장, ‘RX: 닷넷에서 Rx자바까지’는 리액티브 세계로 가는 첫 번째 단계다. 리액티브적인 접근법과 고전적인 접근법을 서로 비교하면서 이들 간의 유사점과 차이점을 알아본다.

2장, ‘왜 옵저버블인가?’는 옵저버 패턴을 살펴보고, Rx자바가 이를 어떻게 구현하고 확장했는지, 또 옵저버블이란 무엇이며 이터러블(Iterable)과는 어떤 관련이 있는지 살펴본다.

3장, ‘헬로 리액티브 월드’는 지금까지 배운 내용을 바탕으로 첫 번째 리액티브 안드로이드 앱을 만들어본다.

4장, ‘옵저버블 필터링’은 옵저버블 시퀀스의 핵심인 필터링을 파헤친다. 발행한 옵저버블에서 우리가 필요한 값만 선택하는 방법이나 유한한 값을 얻는 방법 그리고 오버플로 상황을 대처하는 방법을 비롯해 유용한 트릭도 배워볼 것이다.

5장, ‘옵저버블 변환’은 필요한 시퀀스를 생성하기 위해 옵저버블 시퀀스를 변환하는 방법을 알아본다.

6장, ‘옵저버블 결합’은 함수를 결합하는 법을 살펴보고, 우리가 생성한 옵저버블이 여러 옵저버블과 동시에 동작하는 방법을 배워본다.

7장, ‘스케줄러: 안드로이드 메인 스레드 문제 해결'은 Rx자바 스케줄러를 이용해 멀티스레딩과 동시성 프로그래밍을 다루는 방법을 보여준다. 네트워크 오퍼레이션과 메모리 접근 또는 시간이 많이 소요되는 작업을 리액티브적인 방법으로 생성해볼 것이다.

8장, ‘REST 안에서 평화를: Rx자바와 레트로핏’에서는 능률적이면서도 효과적으로 REST 클라이언트를 만들기 위해 스퀘어의 레트로핏을 Rx자바와 함께 사용하는 방법을 알려준다.

본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.

저자/역자 소개

지은이의 말

사람들 주머니마다 스마트폰이 한 대씩 있는 세상에서는, 매끄럽게 동작하면서도 즐거운 사용자 경험을 제공하도록 앱을 디자인하고 만드는 일이 필수적이다.
Rx자바를 이용한 리액티브 프로그래밍 방식은 개발자가 안드로이드 플랫폼의 한계를 이겨내고 놀랄 만한 안드로이드 앱을 만드는 데 도움을 준다. 이 책은 리액티브 프로그래밍의 기초와 옵저버(Observer) 패턴의 개념부터 Rx자바의 주된 기능까지, 실용적인 예제 코드와 실제 앱이 수반된 실용적인 여정이 될 것이다.
이 책에서는 옵저버블을 맨 처음부터 생성하는 방법과, 리스트나 기존 코드에 있는 함수로 옵저버블을 생성하는 방법을 보여준다. 사용자가 원하는 값만을 지닌 새로운 시퀀스를 만들기 위해 옵저버블 시퀀스를 필터링하는 방법을 배우고, 함수를 옵저버블에 적용하거나 옵저버블의 연쇄적 사용 또는 병합하거나 지핑(zippng)하는 방법도 배워본다. 그리고 안드로이드의 스레드와 동시성 지옥(concurrency hell)을 극복하기 위한 Rx안드로이드 스케줄러의 사용법도 알아본다.
Rx자바와 레트로핏(Retrofit)을 결합해 손쉽게 REST API 통신을 하는 실용적인 예제로 이 책을 마무리할 것이다.

지은이 소개

이반 모르질로(Ivan Morgillo)

몇 년 후에 엔지니어가 되기 전까지는 그저 C64와 기본적인 기술을 지닌 어린아이였다. 이탈텔(Italtel)과 텔레콤 이탈리아(Telecom Italia)에서 임베디드 시스템 컨설턴트로 근무한 후 안드로이드로 분야를 옮겼다. 델타트레(Deltatre)와 몬디아 미디어(Mondia Media), 클레버테크(Clevertech)에서는 컨설턴트로 근무했다.

현재는 모바일과 임베디드 애플리케이션 개발 회사인 알터 에고 솔루션즈(Alter Ego Solutions)를 운영하며, 오픈소스 프로젝트에 기여하면서 주말에는 여전히 개인 안드로이드 프로젝트를 진행 중이다.

옮긴이의 말

안드로이드 개발자라면 누구나 비동기 처리로 골머리를 앓은 경험이 있을 것이다. 모바일 디바이스의 하드웨어 성능이 뛰어나다고 하더라도, 매끄럽게 동작하는 앱을 구현하려면 비동기 처리가 반드시 필요하다. 안드로이드에서는 이러한 비동기 처리를 위해 핸들러(Handler)나 비동기 태스크(AsyncTask) 같은 기능을 제공하지만, 고수준의 비동기 동작을 구현하기란 쉽지 않다. Rx자바와 Rx안드로이드는 이러한 비동기 작업을 손쉽게 처리해주고 개발자가 구현해야 하는 로직에 집중하도록 도와준다. 또한 자바 8에서 추가된 스트림(Stream)에서나 사용할 수 있었던 맵(map)이나 필터(filter) 같은 기능도 제공해, 데이터를 원하는 입맛대로 변경하거나 조작할 수도 있다. 하지만 Rx자바는 진입장벽이 높다는 문제 때문에 이를 프로젝트에 적용하는 데 있어 걸림돌이 되기도 한다.

이 책은 Rx자바를 배우면서 안드로이드 프로젝트에 빠르게 적용하고 싶은 독자를 위한 책이다. Rx자바의 기능을 설명하고 Rx안드로이드를 이용한 안드로이드 프로젝트를 만들어봄으로써 Rx자바와 Rx안드로이드의 기능을 빠르게 습득할 수 있게 했다. 더욱이 버터 나이프(Butter Knife)나 레트로 람다(RetroLambda) 같이 실제 실무에서 많이 사용하는 유용한 라이브러리를 함께 사용함으로써 여러 라이브러리의 사용법도 배울 수 있다는 점은 이 책의 또 다른 매력이라고 할 수 있다. 4, 5, 6장에서는 Rx자바의 진수를 핵심만 요약해 설명함으로써 Rx자바가 제공하는 여러 기능을 한눈에 파악할 수 있다. 7장에서는 안드로이드 개발자가 반드시 알아야 할 스케줄러를 이용한 스레드 관리 기법을 설명한다. 마지막 장에서는 안드로이드 진영에서 유명한 스퀘어(Square)의 레트로핏(Retrofit)과 Rx자바를 함께 사용하는 방법을 설명하면서 Rx자바를 사용하는 개발자에게 꼭 필요한 꿀 팁을 제공한다.

원서는 Rx자바 1.0.x 버전과 Rx안드로이드 0.24 버전을 기준으로 쓰였다. 원서가 출간된 후 Rx안드로이드는 1.0.0 을 발표했고 메이저 업데이트가 이루어지면서 많은 변화가 있었다. 그중 일부 기능은 삭제됐고 일부는 다른 프로젝트로 분리되면서 결과적으로 Rx안드로이드는 경량화됐다.

이는 Rx자바와는 별개로 Rx안드로이드의 사용 방법에 변화가 생긴 것이다. 이러한 변경사항을 예제에 직접 적용하다 보면, Rx안드로이드가 추구하고자 하는 방향성을 이해함은 물론 Rx안드로이드를 공부하는 또 다른 방법이 될 것이다. 1.x에서 변경된 사항은 Rx안드로이드의 깃허브(https://github.com/ReactiveX/RxAndroid/wiki)와 댄 루(Dan Lew)의 블로그(http://blog.danlew.net/2015/09/01/how-toupgrade-to-rxandroid-10)에서 확인할 수 있다.

옮긴이 소개

강경구

안드로이드와 iOS 모바일 애플리케이션을 개발하고 있으며, 새로운 기술이 나올 때마다 어떻게 프로젝트에 적용할 수 있을까 고민한다. 프로그래밍 언어를 배우는 것을 좋아하고, 다른 사람과 지식을 공유하고 이야기하길 즐긴다.

목차

목차
  • 1장 RX: 닷넷에서 Rx자바까지
  • 마이크로소프트 리액티브 익스텐션
  • 자바 세계에 상륙: 넷플릭스 Rx자바
    • Rx자바는 무엇이 다른가?
  • 정리

  • 2장 왜 옵저버블인가?
  • 옵저버 패턴
    • 옵저버 패턴은 언제 사용되는가?
  • Rx자바 옵저버 패턴 툴킷
    • Observable
      • 핫 옵저버블과 콜드 옵저버블
      • 옵저버블 생성
    • Subject = Observable + Observer
      • PublishSubject
      • BehaviorSubject
      • ReplaySubject
      • AsyncSubject
  • 정리

  • 3장 헬로 리액티브 월드
  • 엔진 점화!
    • 의존성
      • Rx안드로이드
    • Utils
      • 롬복(Lombok)
      • 버터 나이프(Butter Knife)
      • 레트로람다(Retrolambda)
  • 첫 번째 옵저버블
  • 리스트로부터 옵저버블 생성하기
  • 좀 더 많은 예제
    • just()
    • repeat()
    • defer()
    • range()
    • interval()
    • timer()
  • 정리

  • 4장 옵저버블 필터링
  • 시퀀스 필터링
  • 필요한 것만 얻기
    • take()
    • taskLast()
  • 단 한 번만 발행
    • distinct()
    • distinctUntilChanged()
  • first()와 last()
  • skip()과 skipLast()
  • elementAt()
  • sample()
  • timeout()
  • debounce()
  • 정리

  • 5장 옵저버블 변환
  • *map 가족
    • map()
    • flatMap()
    • concatMap()
    • flatMapIterable()
    • switchMap()
    • scan()
    • groupBy()
    • buffer()
    • window()
    • cast()
  • 정리

  • 6장 옵저버블 결합
  • merge()
  • zip()
  • join()
  • combineLatest()
  • and(), then(), when()
  • switch()
  • startWith()
  • 정리

  • 7장 스케줄러: 안드로이드 메인 스레드 문제 해결
  • StrictMode
  • 블로킹 I/O 오퍼레이션 피하기
  • 스케줄러
    • Schedulers.io()
    • Schedulers.computation()
    • Schedulers.immediate()
    • Schedulers.newThread()
    • Schedulers.trampoline()
  • 논블로킹 I/O 오퍼레이션
  • SubscribeOn과 ObserveOn
  • 시간이 오래 걸리는 작업 다루기
  • 네트워크 작업 실행
  • 정리

  • 8장 REST 안에서 평화를: Rx자바와 레트로핏
  • 프로젝트 목표
  • 레트로핏
  • 앱 구조
    • 액티비티 클래스 생성
    • RecyclerView 어댑터 생성
      • 일기 예보 검색하기
      • 웹사이트 열기
  • 정리

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[p.64 : 1행]
taskLast()
->
takeLast()

[p.64 : 2행]
taksLast()
->
takeLast()