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