메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

RxJava 프로그래밍

리액티브 프로그래밍 기초부터 안드로이드까지 한 번에

한빛미디어

집필서

판매중

  • 저자 : 유동환 , 박정준
  • 출간 : 2017-09-04
  • 페이지 : 328 쪽
  • ISBN : 9788968488658
  • 물류코드 :2865
TAG :
초급 초중급 중급 중고급 고급
4.2점 (6명)
좋아요 : 4

8가지 핵심 개념으로 쉽게 이해하는 리액티브 프로그래밍 입문

서버나 애플리케이션은 다양한 데이터를 처리하느라 늘 분주하다. 그런데 데이터양이 기하급수적으로 늘면서 기존의 프로그래밍 방식으로 이를 처리하기가 점점 어려워지고 있다. 이에 데이터의 입출력 흐름에 따라 많은 사용자 요청을 한꺼번에 그리고 동시에 처리하는 프로그래밍 기법을 연구하기 시작했고, 그 결과가 이 책의 주제인 리액티브 프로그래밍이다.

 

이 책은 자바 기반으로 리액티브 프로그래밍을 하는 RxJava 입문서다. 리액티브 프로그래밍을 접하면서 무수한 시행착오를 거친 저자가 국내 자바 개발자에게 맞는 RxJava 2 기반의 프로그래밍 노하우를 알려준다. Observable, 리액티브 연산자, 스케줄러, RxAndroid 활용, 디버깅, 예외 처리, 테스트, Flowable 등 RxJava를 시작하는 데 꼭 필요한 핵심 개념을 소개한다.

 

rxjava_733.jpg

 

저자

유동환

생각을 즐기는 프로그래머. 연세대학교 정보대학원에서 경영정보학을 전공한 후 LG전자에서 안드로이드 앱을 개발했다. 최근에는 선행플랫폼개발팀으로 자리를 옮겨 IoT와 AI 관련 프로젝트를 진행하고 있다. 자바카페와 한국자바개발자협의회(JCO)에서 수년간 활동했다.

집필한 책으로는 『안드로이드를 위한 Gradle』(한빛미디어, 2016)이 있고, 번역한 책으로는 『Professional Java Web Services』(정보문화사, 2002)와 『그레이들 레시피』(한빛미디어, 2016)가 있다.

 

운영 중인 블로그와 페북 그룹

저자

박정준

아주대학교에서 컴퓨터공학을 전공한 후 10년 이상 LG전자에서 안드로이드 앱을 개발했다. 불현듯 안드로이드만 다루는 것보다 더 넓은 자바 개발 세상도 경험하고 싶어 현재는 쿠팡에서 서버 사이드 개발을 하고 있다. 풀스택 엔지니어가 얼마나 대단한 사람인지 느끼는 나날을 보내고 있다.

다양한 언어의 함수형과 리액티브 프로그래밍에 관심이 많다. 백발에도 프로그래밍하는 개발자가 되고자 노력하고 있다.

 

Chapter 1 리액티브 프로그래밍 소개

__1.1 리액티브 프로그래밍

____1.1.1 자바 언어와 리액티브 프로그래밍

____1.1.2 리액티브 프로그래밍 개념 잡기

__1.2 RxJava를 만들게 된 이유 

__1.3 RxJava 처음 시작하기

____1.3.1 io.reactivex

____1.3.2 Observable 클래스

____1.3.3 just() 함수 

____1.3.4 subscribe() 함수 

____1.3.5 System.out::println

____1.3.6 emit() 메서드

__1.4 RxJava를 어떻게 공부할 것인가 

__1.5 마블 다이어그램 보는 법 

__1.6 마치며 

 

Chapter 2 Observable 처음 만들기

__2.1 Observable 클래스

____2.1.1 just() 함수

____2.1.2 subscribe() 함수와 Disposable 객체 

____2.1.3 create() 함수

____2.1.4 fromArray() 함수 

____2.1.5 fromIterable() 함수 

____2.1.6 fromCallable() 함수

____2.1.7 fromFuture() 함수 

____2.1.8 fromPubilsher() 함수 

__2.2 Single 클래스

____2.2.1 just() 함수 

____2.2.2 Observable에서 Single 클래스 사용

____2.2.3 Single 클래스의 올바른 사용 방법 

__2.3 Maybe 클래스 

__2.4 뜨거운 Observable

__2.5 Subject 클래스 

____2.5.1 AsyncSubject 클래스

____2.5.2 BehaviorSubject 클래스

____2.5.3 PublishSubject 클래스 

____2.5.4 ReplaySubject 클래스

__2.6 ConnectableObservable 클래스 

__2.7 마치며 

 

Chapter 3 리액티브 연산자 입문

__3.1 map() 함수 

__3.2 flatMap() 함수

____3.2.1 구구단 만들기 

__3.3 filter() 함수

__3.4 reduce() 함수

____3.4.1 데이터 쿼리하기

__3.5 마치며

 

Chapter 4 리액티브 연산자의 활용

__4.1 생성 연산자 

____4.1.1 interval() 함수

____4.1.2 timer() 함수 

____4.1.3 range() 함수

____4.1.4 intervalRange() 함수 

____4.1.5 defer() 함수 

____4.1.6 repeat() 함수 

__4.2 변환 연산자 

____4.2.1 concatMap() 함수 

____4.2.2 switchMap() 함수

____4.2.3 groupBy() 함수 

____4.2.4 scan() 함수

__4.3 결합 연산자 

____4.3.1 zip() 함수

____4.3.2 combineLatest() 함수

____4.3.3 merge() 함수 

____4.3.4 concat() 함수

__4.4 조건 연산자 

____4.4.1 amb() 함수

____4.4.2 takeUntil() 함수

____4.4.3 skipUntil() 함수 

____4.4.4 all() 함수 

__4.5 수학 및 기타 연산자

____4.5.1 수학 함수

____4.5.2 delay() 함수 

____4.5.3 timeInterval() 함수 

__4.6 마치며

 

Chapter 5 스케줄러

__5.1 스케줄러 개념 배우기

__5.2 스케줄러의 종류 

____5.2.1 뉴 스레드 스케줄러

____5.2.2 계산 스케줄러

____5.2.3 IO 스케줄러

____5.2.4 트램펄린 스케줄러

____5.2.5 싱글 스레드 스케줄러

____5.2.6 Executor 변환 스케줄러 

__5.3 스케줄러를 활용하여 콜백 지옥 벗어나기 

__5.4 observeOn() 함수의 활용

__5.5 마치며

 

Chapter 6 안드로이드의 RxJava 활용

__6.1 RxAndroid 소개

____6.1.1 리액티브 라이브러리와 API

____6.1.2 안드로이드 스튜디오 환경 설정 

__6.2 RxAndroid 기본

____6.2.1 Hello world 예제 

____6.2.2 제어 흐름

____6.2.3 RxLifecyle 라이브러리

____6.2.4 UI 이벤트 처리

__6.3 RxAndroid 활용

____6.3.1 리액티브 RecyclerView

____6.3.2 안드로이드 스레드를 대체하는 RxAndroid

____6.3.3 REST API를 활용한 네트워크 프로그래밍

__6.4 메모리 누수 

____6.4.1 해결책 1: Disposable 인터페이스를 이용하여 명시적으로 자원 해제 

____6.4.2 해결책 2: RxLifecycle 라이브러리 이용

____6.4.3 해결책 3: CompositeDisposable 클래스 이용 

__6.5 마치며

 

Chapter 7 디버깅과 예외 처리

__7.1 디버깅

____7.1.1 doOnNext(), doOnComplete(), doOnError() 함수 

____7.1.2 doOnEach() 함수

____7.1.3 doOnSubscribe(), doOnDispose(), 기타 함수

__7.2 예외 처리 

____7.2.1 onErrorReturn() 함수

____7.2.2 onErrorResumeNext() 함수 

____7.2.3 retry() 함수 

____7.2.4 retryUntil() 함수

____7.2.5 retryWhen() 함수 

__7.3 흐름 제어 

____7.3.1 sample() 함수 

____7.3.2 buffer() 함수

____7.3.3 throttleFirst()와 throttleLast() 함수

____7.3.4 window() 함수

____7.3.5 debounce() 함수 

__7.4 마치며

 

Chapter 8 테스팅과 Flowable

__8.1 JUnit 5 활용

__8.2 TestObserver 클래스 

__8.3 비동기 코드 테스트

__8.4 Flowable 클래스

____8.4.1 Observable과 Flowable의 선택 기준 

____8.4.2 Flowable을 활용한 배압 이슈 대응

__8.5 마치며

RxJava 2를 소개하는 국내 첫 집필서

전통적인 프로그래밍은 일정한 패턴에 맞춰 데이터를 처리하는 동기 방식이 주류였다. 이러한 방식은 정해진 우선순위에 맞춘 제어 흐름을 설계해 효율적인 처리 결과를 보여줄 수 있었다. 그런데 웹, 스마트폰, IoT 등 다양한 인프라에서 수많은 데이터가 쏟아지는 시대에 접어들면서 사람이 효율적인 패턴을 모두 파악하기 어려워지면서 상황에 맞춰 제어 흐름을 조정하는 비동기 프로그래밍의 중요성이 커지고 있다.

 

리액티브 프로그래밍은 비동기 프로그래밍에 새로운 패러다임을 제시하는 방식이다. 상황에 따라 필요한 함수를 호출해 데이터 흐름을 제어할 수 있다. 처음에는 이해하기 어렵겠지만 적응이 끝나면 콜백 지옥을 겪지 않고 데이터를 유연하게 다룰 수 있다.

 

이 책은 국내 자바 개발자의 눈높이에 맞춰 리액티브 프로그래밍과 RxJava 2를 배우는 입문서다. 그간 RxJava가 궁금했지만 쉽게 다가갈 수 없던 개발자에게 큰 도움이 될 것이다.

 

★ Step 1. 리액티브 프로그래밍 이해하기

다양한 비유와 예시를 통해 리액티브 프로그래밍이 무엇인지 설명한다. 또한 Hello World를 RxJava로 만들어보고 분석하면서 리액티브 프로그래밍을 맛본다.

 

★ Step 2. 리액티브 연산자 익히기

RxJava는 함수형 프로그래밍의 개념을 포함한다. 즉, 프로그래밍은 함수 연산을 조합해서 이루어진다는 뜻이다. 여기에서는 map(), flatMap() 등의 핵심 함수와 생성, 변환, 결합, 조건 등을 처리하는 연산자 함수를 살펴본다. 한번 알아두면 새로운 함수를 접해도 쉽게 기능을 파악할 수 있는 토대가 될 것이다.

 

★ Step 3. 스케줄러 이해하기

데이터 흐름을 원활하게 관리하려면 스케줄러를 통해 데이터가 들어오고 나가는 일을 개발자가 제어할 수 있어야 한다. RxJava는 스케줄러도 함수 형태로 사용한다. RxJava의 스케줄러 개념과 주요 스케줄러 함수를 살펴보고 콜백 지옥을 벗어나는 방법도 알아본다.

 

★ Step 4. 안드로이드 활용 방법 살펴보기

안드로이드 앱 개발도 RxJava를 도입하면 UI 제어나 라이프 사이클 스케줄링에 많은 도움을 받을 수 있다. 안드로이드에서 사용할 수 있는 RxAndroid 라이브러리를 알아보고, 리액티브 RecyclerView, REST API 프로그래밍 활용 등 안드로이드 앱 개발의 효율을 높일 수 있는 개발 요소가 무엇인지 살펴본다.

 

★ Step 5. 예외 처리와 테스팅 살펴보기

리액티브 프로그래밍은 예외 처리와 테스팅도 함수 기반으로 처리한다. 따라서 예외 처리나 테스팅 관련으로 사용할 수 있는 함수는 무엇이고, 기존 프로그래밍 기법과 비교해서 예외 처리를 적용하는 방법에 관해서 살펴본다. 또한 RxJava 2에서 새롭게 도입한 Flowable을 이용해 배압 이슈를 어떻게 처리하는지도 알아본다.

 

★ 대상 독자

- 실무에 종사하는 서버 사이드 자바 프로그래머

- 비동기 앱 개발이 필요한 안드로이드 프로그래머

  • 유동환/박정준 님이 공동으로 집필한 RxJava 프로그래밍을 소개합니다. 이 글을 읽기 전에, 다음 링크에서 Reactive Extensions(Rx)의 역사와 Rx의 역할이 무엇인지 이해하고 이 글을 읽는 것을 추천합니다.

     

    RxJava는 JVM 환경에서 자바로 구현한 Reactive Extensions 라이브러리입니다. RxJava는 현재 두 버전으로 제공되고 있는데, 새로 학습하거나 프로젝트에 도입하는 분은 최신 버전인 2.0을 사용하는 것을 추천합니다. 참고로 RxJava 프로그래밍에서는 RxJava 2.1.3(2017년 11월 25일 기준으로 최신 버전은 2.1.6입니다.)을 기준으로 소개합니다.

     

    RxJava 프로그래밍은 필자가 꼭 읽고 싶었던 책이었는데, 한빛미디어에서 좋은 기회를 제공해주셔서 약간의 압박(?)감을 느끼고 집중해서 읽을 수 있었습니다.

     

    이 책에서 다루는 내용은?

    RxJava 프로그래밍은 모두 8개의 장으로 구성되어 있습니다. 먼저 RxJava를 소개하는 것부터 시작하여 RxJava의 기본을 학습하는데, 충분한 내용을 담고 있습니다. 처음 리액티브 프로그래밍 세계에 발을 내디디면, 대부분 프로그래머들은 기존 프로그래밍과 다른 접근 방법으로 혼란스러워합니다.

    >

     

    RxJava 프로그래밍은 저자가 직접 경험하며 좌충우돌하는 에피소드를 담아 처음 RxJava를 접했을 때의 경험담을 들려줍니다. 이 에피소드를 중심으로 RxJava를 이해하는 과정을 소개하고 있으며, 이 과정에서 얻은 통찰력을 기반으로 RxJava를 효과적으로 학습하는 방법을 소개하고 있습니다. 책의 순서도 소개하는 학습 순서와 거의 같습니다.

     

    먼저 마블 다이어그램을 소개하고 해석하는 방법을 소개합니다. 이후 주요 RxJava의 주요 클래스와 리액티브 연산자를 소개하고 간단한 예제를 활용하여 사용방법을 설명합니다. 기존에 자바 8을 사용하신 분이라는 큰 어려움 없이 코드를 이해할 수 있을 정도로 쉬운 간단한 예제로 구성되어 있습니다. 다음으로 RxJava에서 제공하는 주요 연산자를 활용하여 조금 복잡한 문제를 쉽게 해결하는 방법을 소개합니다. 이 단락을 통해 RxJava를 활용할 때 응용할 수 있는 영감을 얻을 수 있었습니다. 다음으로 RxJava에서 제공하는 주요 스케쥴러를 소개하며 각 스케쥴러의 장단점을 보여줍니다. RxJava의 주요 구성 요소에 대한 설명을 마치고, RxJava로 프로그래밍할 때 효율적인 디버깅과 예외 처리 방법, 최신의 JUnit 5를 활용한 테스팅 방법까지 소개하고 있습니다.

     

    RxJava를 학습하거나 활용해야 하는 분들에게 최고의 기본서라고 생각합니다. RxJava를 학습하는데 가장 좋은 매뉴얼은 공식 홈페이지에서 제공하지만, 이 책을 통해 RxJava를 이해한 후 그 매뉴얼을 보면 이해도가 한층 더 높아질 것으로 확신합니다. 

     

    마치면서...

    RxJava 프로그래밍은 RxJava의 모든 것을 다루지는 않습니다. 리액티브 프로그래밍을 이해할 수 있도록 입문서 역할을 충실히 담당하고 있으며, 마블 다이어그램의 해석 방법, 주요 함수와 RxJava에서 제공하는 기능들을 쉽게 소개합니다. RxJava 프로그래밍을 통해 리액티브 프로그래밍 세계에 발을 쉽게 담글 수 있습니다. 이제 자유롭게 항해를 하기 위해서는 많은 경험과 지식을 필요할 것입니다.

  • 최근 트렌드에 관심있는 사람이라면 리액티브 프로그래밍에 대해 들어봤을 것이다.

    그렇지만 쉽게 입문하기 어려운 것이 리액티브 프로그래밍이라 생각된다.

     

    그 이유는 '관점'의 변화 때문이다.

    그전까지 개발할때는 필요한 데이터를 조회해서 처리하는 방식이였다면,

    리액티브 프로그래밍에서는 데이터 소스가 변경된 데이터를 밀어주는 방식이다.

     

    책에서는 이를 

    '기존 pull방식의 프로그래밍 개념을 push방식의 프로그래밍 개념으로 바뀐다'

    라고 설명한다.

     

    이렇듯 기존의 개발 관점이 달라지기 때문에 상당한 학습비용이 필요하다.

     

    그동안 리액티브 프로그래밍을 다룬 책이 없진 않았지만,

    이번에 나온 'RxJava 프로그래밍'은 

    2017년 11월 시점에서 리액티브 프로그래밍 입문서로서 최선의 선택이라고 생각한다.

     

    최선의 선택이라 생각한 이유를 말하자면,

     

    첫째. 상당한 학습비용이 필요하기 때문에 가급적 최신 내용의 책을 선택해야 한다.

    상당한 시간을 투자한다면 가급적 최신버전의 내용을 학습하여 학습한 내용의 유효기간이 길어야 한다.

    본 책은 1.x 에서 2.x 대 버전으로 전환되는 시점에서 2.x 대 버전을 다룬 유일한 책이다.

    가장 최신의 버전을 다루고 있기에 가장 적합하다고 할 수 있다.

     

    둘째. 너무 두껍지 않은 분량이다.

    책의 두께와 내용 질은 비례하기 쉽지 않다. 또한, 너무 두꺼우면 읽다가 지쳐버린다.

    입문서는 가급적 기본 개념과 약간의 응용을 통해 좀 더 넓은 바다로 나아갈 수 있는 시작점이 적합하다고 생각한다.

     

    셋째. 마블 다이어그램과 저자의 경험을 통한 팁으로 구성된 설명이 많은 도움이 된다.

    리액티브 프로그래밍은 기존의 개발 관점과 다르기 때문에 이해하기가 쉽지 않다.

    그래서 그런지, 공식문서(ReactiveX 홈페지이 : http://reactive.io) 에서도 마블 다이어그램을 통해 흐름을 설명한다.

    본 책 또한 마블 다이어그램 잘 활용하여 설명하고 있다.

    우선 함수를 설명할때 마블 다이어그램으로 흐름을 보여준다. 코드는 다이어그램을 활용한 설명 이후에 나온다.

    코드를 먼저 봤다면 이해하기 어려운 내용을 마블다이어그램을 통해 효과적으로 보여주는 점이 좋았다.

    또한, 중간중간 저자의 학습 팁이 나오는 부분도 도움이 되었다.

     

    나에게 리액티브 프로그래밍은 상당히 생소하고 이해하기 쉽지 않았다.

    본 책을 통해 학습을 하면서도, 몇번은 더 반복해서 보고 실제 구현을 해봐야 체득이 가능하겠다는 생각이 들었다.

     

    앞으로는 리액티브 프로그래밍은 필수적으로 알아야 하는 시대가 될 것이라 생각한다.

    이런 시점에서 이러한 입문서를 통해 개념을 이해하고 반복적으로 학습하는 것이 매우 중요할 것이다.

  • 여기저기에서 리액티브 프로그래밍과 함수형 프로그래밍에 대해서 많이 들어오면서 관심이 생기던 찰나에, 한빛미디어에서 RxJava 프로그래밍 도서가 출간되었다는 소식을 접하게 되었습니다. RxJava는 자바에서 리액티브 프로그래밍을 지원하기 위해 넷플릭스가 만든 라이브러리입니다. 이 라이브러리를 사용해서 데이터 흐름 중심의 프로그래밍이 가능하게 됩니다. 

     

    실무에서 자바를 사용하고 있지만, 객체지향조차 제대로 지키는 것이 버겁게 느껴질 때가 많았습니다. 그래서 리액티브 프로그래밍, 함수형 프로그래밍에 막연한 관심은 있었지만 정작 시간도 없고 공부할 여건이 안 되었습니다. 

     

    이 책을 읽기 전에 함수형 프로그래밍의 기초 개념을 전혀 모르는 상태에서 출발했습니다. 리액티브 프로그래밍의 개념도 전혀 알지 못했고, RxJava라는 라이브러리가 있다는 것도 금시초문이었습니다. 업무와도 크게 관련이 없을 것이라고 생각했고, 새로운 것을 배우는데 도전하는 마음만 가지고서 책을 읽기 시작했습니다.

     

    패러다임을 바꾼다는 것은 굉장히 낯설고 두려운 일인 것 같습니다. 대학생 때 C를 배우다가 다음 학기에 C++, Java를 배우기 시작했을 때 낯설었던 기억이 새록새록 납니다. 그나마 객체지향 컨셉은 좋은 교수님 수업을 들어서 그럭저럭 이해할 수 있게 되었는데, 함수형 개념에 대해 다른 사람들에게 넌지시 들었을 때에는 이해하기조차 힘들었습니다. 사실 몇 년 전에 함수형 프로그래밍을 배워보고 싶어서 하스켈 책을 보다가 포기했던 적이 있어서 특히나 더 그랬습니다.  

     

    지금 회사에서는 자바 7 버전을 사용해서 개발하고 있는데, 평소에 자바는 리액티브 프로그래밍이나 함수형 프로그래밍과는 거리가 멀다는 생각을 가지고 있었습니다. 그런 것들을 하려면 새로운 언어를 사용해야 하는 것으로 생각하고 있었습니다. 이런 와중에 한빛미디어의 RxJava 프로그래밍 책을 보고 일차로 리액티브 프로그래밍을 Java 언어로 짤 수 있다는 사실에 놀랐고, 이차로 자바 1.6에서도 돌아간다는 사실이 신기하게 느껴졌습니다. 

     

    만약 새로운 언어로 리액티브 프로그래밍을 시작했다면 더 낯설고 힘들어서 포기했을 것 같습니다. 그런데 한빛미디어의 RxJava 책은 익숙한 자바로 실습 예제를 따라 쳐보며 배울 수 있어서 전혀 낯설지 않고 좋았습니다. 리액티브 프로그래밍을 자바에서 할 수 있을 것이라고는 기대하지 않았는데, 심지어 자바 버전도 1.6까지 지원한다고 하니 놀라지 않을 수 없습니다. 지금 개발하고 있는 자바 애플리케이션에서도 RxJava 라이브러리만 임포트하면 당장 일부분에도 적용할 수 있으리라는 생각이 들었습니다.

     

    이 책을 좀 더 들여다보면 배우기 쉬운 순서로 차근차근 서술되어 있다는 것을 알게 됩니다. 먼저 CHAPTER 1에서는 리액티브 프로그래밍을 설계하는 마블 다이어그램을 읽는 방법을 배우며, 리액티브 프로그래밍의 개념을 조금씩 알아갑니다. 

     

    CHAPTER 2에서는 Observable이라는 아주 중요한 개념을 다룹니다. Observable은 ‘관찰 가능하다’라는 뜻으로, 리액티브 프로그래밍에서는 데이터들을 Observable로 만들고 누군가 이 Observable를 구독하게 함으로써 구독자들이 데이터를 받아 처리할 수 있게 합니다.

     

    처음에 책을 읽으면서 Observable의 개념을 이해하는 것이 쉽지 않았습니다. 지금도 솔직히 Observable이 100% 완벽하게 이해되지는 않습니다. 아무리 자바로 객체지향프로그래밍을 해 왔다고 하지만, 아직도 명령형 방식을 따라 절차대로 처리하는 방식이 더 직관적으로 보이기 때문입니다. 

     

    그런데 책을 읽어나가다 보면 왜 데이터를 Observable로 만들고 옵서버 형태로 구독자들이 구독을 하게 하는지 어렴풋이 공감하게 될 때가 있습니다. 간단히 생각해보면 데이터를 처리하는 애플리케이션에서는 데이터가 중심이 되고, 데이터들이 들어왔을 때 이벤트를 실행하는 로직이 필요합니다. 데이터 중심의 패러다임을 이해하는 것이 어렵긴 하지만 실습 예제를 따라하다 보면 어느 정도 공감은 갑니다.

     

    CHAPTER 3에서는 기본 리액티브 연산자인 map(), filter(), reduce()에 대해 다룹니다. 단순히 생각해보면 어떤 데이터를 처리하기 위해서는 우선 그 데이터를 함수에 매핑하여 연산하여 결과값을 받고, 데이터 중 필요한 것만 필터하고, 결과를 통합하는 과정들이 필요합니다. 이 과정이 map() --> filter() --> reduce() 인 것입니다. 3장에서는 RxJava에서 제공하는 map(), filter(), reduce() 부류의 여러 함수들을 실습해 볼 수 있게 구성되어 있어 유용합니다. 특히 구구단을 리액티브 방식으로 짜보는 예제가 이해하는데 매우 도움이 되었습니다.

     

    2주간 차근차근 3장까지 따라하면서 기본적인 리액티브 연산자를 배울 수 있었습니다. CHAPTER 4에서는 더 많은 리액티브 연산자들을 카테고리별로 배울 수 있게 되어 있고, CHAPTER 5에서는 비동기 프로그래밍을 위한 스케쥴러에 대해 학습하게 됩니다. 6장에서는 안드로이드에서 RxJava를 사용하는 예제를 배울 수 있어 더욱 더 기대가 됩니다.

     

    한빛미디어의 RxJava 프로그래밍은 예제 실습 위주로 구성되어 있어서, RxJava를 처음 알아가는 사람들에게 안성맞춤인 책입니다. 함수형 프로그래밍, 람다 표현식에 대해 전혀 알지 못해도 차근차근 따라하면서 점차 이해를 할 수 있어서 매우 좋습니다.

     

  • samsung|SM-G930S|Normal program|Pattern|1/50sec|F/1.7|0.00 EV|4.2mm|ISO-100|Flash did not fire|2017:11:28 00:54:54

     

     

    RxJava의 아이콘으로 사용되는 둥그런 물고기 모양의 그림과 어울리게 보라색 같은 핑크색 표지가 반긴다.

     

    상당히 어려운 RxJava임에도 불구하고 쉽게 풀어냈다는 의지를 표지에 담은듯한 느낌이 든다. 나역시 몇달전부터 표지만으로도 흥미를 끌었던 책이기 때문에 상당히 기대함으로 보기 시작하였다.

     

     

    samsung|SM-G930S|Normal program|Pattern|1/60sec|F/1.7|0.00 EV|4.2mm|ISO-100|Flash did not fire|2017:11:28 00:55:07

     

    RxJava 프로그래밍은 2017년 9월 4일 초판1쇄 발행이다. 나름 따끈따끈한 책이며, 그래서 RxJava 2를 도입하여 설명하였고, Android Studio 3.0을 기초로 설명하였다. 물론 이당시에는 정식 릴리즈가 배포된 상태가 아니기 때문에 Canary 8 기준이다. 이렇게 Beta도 아닌 버전으로 작업하기 위해서는 상당히 어려웠겠지만, 그만큼 최신 환경에서 작업할 독자를 배려한 것이라고 생각이 든다.

     

     

    samsung|SM-G930S|Normal program|Pattern|1/60sec|F/1.7|0.00 EV|4.2mm|ISO-80|Flash did not fire|2017:11:28 00:55:18

     

    도입하는 말에서도 눈에 띈 것은, 자바 개발자는 함수형 프로그래밍과 거리가 먼 사람들인데, 이 책에서는 대세가 함수형 사고방식과 리액티브 프로그래밍이라고 말한다. 사실 그렇다. 모던 언어가 범람하는 이 때에 아무리 Legacy 시스템의 근간이 되는 자바라고 할찌라도 이러한 대세를 거스르긴 어려울 것이다. 이것은 하나의 개발 사고방식이기 때문에, 단순히 언어의 특성을 아는 것과는 다르다. 사용법을 익혔다고 해도, 그 원리를 올바로 이해하지 못하면 의도와 다르게 개발할 수 있기 때문이다.

     

    그리고 이전에 접했던 것은 모두 RxJava 1.x를 기초로 했던 책들이지만, 이 책은 최초로 RxJava 2.x를 기반으로 한 책이라는 것을 강조하였다. 사실 RxJava 1.x와 2.x는 이름은 같지만 너무도 다른 버전이다. 쉽게 컨버팅할 수가 없다. 애초에 이해가 어렵기 때문이다. 이러한 것을 저자가 잘 알고 그러한 관점에서 배려하고 책을 지었다는 것으로 강조하고 있다.

     

     

    samsung|SM-G930S|Normal program|Pattern|1/60sec|F/1.7|0.00 EV|4.2mm|ISO-80|Flash did not fire|2017:11:28 00:55:28

     

    RxJava가 특성상 Lambda를 이용하는 것이 매우 일반적이기 때문에, 이것을 이용한 Java 8의 환경에서 작성했다는 것. 그리고 요즘 각광받는 gradle을 이용하여 빌드하였다는 것을 강조하였다. 물론 기존 시스템에 익숙한 이클립스 사용자를 위해 Java 프로젝트는 이클립스로 진행하도록 하였다. IntelliJ도 이클립스 못지 않게 인기가 많지만, Android Studio가 나온다는 것만으로도 위안을 삼아야 될 것 같다.

     

     

    이 책의 주 목차를 정리하면 다음과 같다.

     

    CHAPTER 1. 리액티브 프로그래밍 소개

    CHAPTER 2. Observable 처음 만들기

    CHAPTER 3. 리액티브 연산자 입문

    CHAPTER 4. 리액티브 연산자의 활용

    CHAPTER 5. 스케줄러

    CHAPTER 6. 안드로이드의 RxJava 활용

    CHAPTER 7. 디버깅과 예외 처리

    CHAPTER 8. 테스팅과 Flowable

     

     

    목차를 보면 느낌이 오는 것이, 길게 나열하지 않고 필요한 것이 이것이니 이것을 보는것이 좋겠다고 정리한 흔적이 보인다.

     

     

    samsung|SM-G930S|Normal program|Pattern|1/60sec|F/1.7|0.00 EV|4.2mm|ISO-64|Flash did not fire|2017:11:28 00:56:00

     

    일단, 기존에 RxJava를 접했던 사람들은 크게 문제가 없겠지만, RxJava가 무엇인지 이름조차 처음들어본 사람, 혹은 들어는 봤지만 하나도 모르는 사람을 위해 RxJava에 대한 간단한 히스토리와 큰 맥락에서의 필요성을 이야기 하고 있다. 크게 보면 RxJava로 처리할 경우 자바를 함수형 프로그래밍과 같은 구조로 사용할 수 있다는 것이다. 이것이 무조건 장점은 아니겠지만, 네트워크나 주변 I/O를 활용하는것이 이젠 일반화가 된 이 시대에는 뗄레야 뗄 수 없는 구조가 된 것이다.

     

     

    samsung|SM-G930S|Normal program|Pattern|1/60sec|F/1.7|0.00 EV|4.2mm|ISO-80|Flash did not fire|2017:11:28 00:56:21

     

    RxJava에서는 "마블 다이어그램"이라는것이 있다. 한번쯤 홈페이지를 방문한 사람이라면 처음보지는 않았을 것이다. 마블 다이어그램은 수없이 봤지만, 이것의 의미가 무엇인지, 읽는 방법도 설명해주는 항목을 기재하였다.

     

     

    samsung|SM-G930S|Normal program|Pattern|1/60sec|F/1.7|0.00 EV|4.2mm|ISO-80|Flash did not fire|2017:11:28 00:57:08

     

    그것도 아주 상세히 다뤘다. 이것을 보기 전까지는 각 도형들이 내려올 때 뒤집혀서 내려왔다는 것을 간과했었는데, 자세히보니 이것도 의미가 있는 것이었다. 이것은 flip함수에 대한 내용이기 때문이다.

    이렇듯 저자는 직접 자신이 겪었던 불편함과 궁금증을 차곡차곡 모아, 사람들의 간지러운 부분을 긁어주는 역할을 하려고 노력한 것이 엿보인다. 

     

     

    samsung|SM-G930S|Normal program|Pattern|1/60sec|F/1.7|0.00 EV|4.2mm|ISO-80|Flash did not fire|2017:11:28 00:57:45

     

    이 밖에도 안드로이드를 위한 챕터도 별도로 존재한다. RxJava만 예제로 들기에는 안드로이드에서도 RxJava를 많이 도입하는 추세이기 때문에 많은 아쉬움이 남지 않도록 배려하였다.

     

     

    samsung|SM-G930S|Normal program|Pattern|1/60sec|F/1.7|0.00 EV|4.2mm|ISO-100|Flash did not fire|2017:11:28 00:57:56

     

    이 책의 맨 뒷편에는 "국내 자바 개발자에게 맞는 RxJava 2기반의 프로그래밍 노하우를 알려준다"는 표현을 적어놓았다.

     

    이 말은 이 책에 대해 잘 설명한 내용이라고 생각한다. 이 책은 RxJava에 대해 교과서적인 내용을 담기도 하였지만, 그것보다는 저자의 노하우를 적었다는 느낌을 더 많이 받았기 때문이다. 그렇기 때문에 다른 책보다도 더 실무적인 부분에 도움이 되는 책이라고 생각이 든다.

     

     

    마지막으로 장점과 단점을 꼽아보면 다음과 같다.

     

    먼저 장점으로는

     

    - 저자의 실제적인 노하우가 엿보인다.

    - 물을 떠다주는 것이 아닌, 물을 떠먹는 방법을 알려준다.(실제 Reference 문서를 읽을 수 있는 능력을 길러준다.)

    - 각 개념에 대해서는 필요하다면 직접 그림을 그려서 설명한 부분이 많이 있다.

    - RxJava 2 및 Android Studio 3.0 기반을 도입한 것처럼 최대한 최신 기술 기준으로 기술하였다. 특히 RxJava 2로써는 최초의 책이다.

     

     

    단점으로 생각되는 부분은

     

    - 책의 구성이 조금은 산만하여 챕터별 핵심이 잘 와닿지 않는다.

    - 하고싶은 이야기의 나열식으로 되어있어, 구성이 깔끔하게 된 느낌을 받지는 못했다.

    - RxJava 1.x에서 2.x로 도입하려는 사용자를 위해 챕터를 별도로 할당하거나, 비교표를 풍부하게 삽입되었으면 하는 아쉬움이 있다.(간간히 나오기는 하지만 부족해보인다.)

     

     

    이 책을 평가해보면 다음과 같다.

     

    가격: 9 / 10

    내용: 9 / 10

    디자인: 8 / 10

    구성: 6 / 10

     

     

    저자: 유동환, 박정준

    대상자: 자바 중급 이상의 개발자, 리액티브 및 함수형 프로그래밍에 대해 알고자 하는 개발자, RxJava 2.x가 궁금한 개발자, 새로 프로젝트를 설계하는 개발자 등

  • 11월 20일 리뷰 - 리뷰자 김종욱

     

     본 블로거는 평소에 비동기식 프로그래밍에 큰 관심이 있었다. 왜냐하면 게임 서버나 혹은 게임 클라이언트 같은 유동적인 환경에서 복잡한 비동기식 처리가 간혹가다 사용되며, 이러한 처리의 에러를 방지하는 것은 꾀나 고된 일이었기 때문이다. 그러던 와중에 본 서를 접하게 되었고, 본 블로거에게 필요한 비동기식 처리라는 관점을 어떻게 바라봐야되는지를 본 서에서 깨닫게 해줬다. 다만 책에서 약간의 오탈자나 번호 오기되어있으니 이부분은 아쉬움을 남겼다.

      

    책에 관한 본격적인 리뷰에 임하기에 앞서 어떤 사람들에게 본 서를 권하는지 적어보도록 하겠다.

     


    【어떤 독자를 위한 책인가】

     

     본 서는 Reactive한 즉 비동기적인 프로그래밍에 대해서 관심있는 개발자나 혹은 순수 RX-Java를 어떻게 공부해야되는지 궁금한 입문자를 위한 서적이다. 물론 중급자가 읽기에도 적당하다. 기초에 필요한 내용들을 아주 정확하고 친절히 설명하고 있으며, 중간 중간 독자가 간지러워할 만한 부분을 시원히 긁어주고 있기 때문이다.

        

    【책의 구성】 'RxJava 프로그래밍책의 구성은 어떠한가.

    망치 본 서의 구성은 총 8개의 쳅터로 구성되어있으며, 처음에는 리액티브 프로그래밍이 무엇인지로 시작하여 이를 기본적으로 어떻게 사용해야하는지에 대한 방법에 대해서 1장을 시작으로 마지막엔 어떤식으로 단위 테스트나 디버깅을 하여야하는지 술하고 있다. 이 책을 처음 읽는 독자라면 분명 처음엔 전부를 이해하는데에 한계가 있을 것이라 생각된다. 왜냐하면 기존의 프로그래밍 방식과는 상당히 느낌이 새롭고 접근 방식이 독특하기 때문이다. ( 블로거의 경우 총 3번 정독하고 나서야 본문의 내용들을 정확히 이해할 수 있었다.) 하지만 반복과 꾸준함엔 장사가 없는 법. 꾸준히 다독하며 필요한 부분을 집중 공략한다면 분명 RX-JAVA를 공략할 수 있을 것이다. 책의 각 장의 내용은 아래와 같다.
     

    【RxJava 프로그래밍 을 읽으며…….】

     예전 블로거가 프로그래밍을 처음 하던 시절에는 비동기식으로 프로그래밍을 한다는 것은 상당히 괴롭고 어려운 일이였다. 물론 지금도 그러하다. 각각의 데이터들을 어떤식으로 효과적으로 처리하고 병목이나 문제가 발생하지 않게한다는 것은 꾀나 고급스러운 기술과 숙련된 기술을 필요로했다. 하지만 요즘은 이러한 기술들이 전부 라이브러리나 혹은 그것을 위한 전문화된 언어들로 손쉽게 디자인하고 구현할 수 있다. 이는 예전에 비해 현대의 프로그래밍 기술이 월등히 진보했음을 시사한다. 이렇게 좋은 언어들이 넘치는 시대에 프로그래밍을 안한다는 것은 참으로 어리석은 일이다. 

     

     

    【점수…….】

    구성 : ★★★★☆ 내용:★★★☆☆  디자인: ★★★☆☆ 전문성 : ★★★☆☆


    #본 리뷰는 리뷰자 김종욱의 저작권에 귀속되므로 참고시 참고 URL 명시 및 저작자에게 사용 통보를 해 주시기 바랍니다.

    #본 리뷰의 점수 및 평가 내용은 김종욱 리뷰자의 한정된 것이므로 지극히 주관된 평가 임을 명시합니다.

    #학습과 관련된 질문과 문제에 대한 질문은 일절 받지 않습니다. 스스로 찾아서 학습하는 것 그것이야 말로 진정한 학습자입니다. 



    ######  감사합니다  ######  

  • 책의 내용은 유익합니다.

    하지만 초반부터 오탈자가 너무많이 보입니다.

    페이지에 달린 참조 인덱스는 번호가 하나씩 밀린경우가 많고요.

    예) 46페이지 : 내용에는 2, 4으로 되어있지만, 아래 참조 번호는 3, 4 나옴

    그림번호도 오류있고요.

    검수가 재대로 안된느낌입니다.

  • 결재하기
    배송료 : 0원배송료란?

    배송료 안내

    • 책, 아이템 등 상품을 3만원 이상 구매시 무료배송
    • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

    무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

    닫기

    리뷰쓰기

    닫기
    * 도서명 :
    RxJava 프로그래밍
    * 제목 :
    * 별점평가
    * 내용 :

    * 리뷰 작성시 유의사항

    글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

    1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
    2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

    오탈자 등록

    닫기
    * 도서명 :
    RxJava 프로그래밍
    * 구분 :
    * 상품 버전
    종이책 PDF ePub
    * 페이지 :
    * 위치정보 :
    * 내용 :

    도서 인증

    닫기
    도서명*
    RxJava 프로그래밍
    구입처*
    구입일*
    부가기호*
    부가기호 안내

    * 회원가입후 도서인증을 하시면 마일리지 500점을 드립니다.

    * 한빛 웹사이트에서 구입한 도서는 자동 인증됩니다.

    * 도서인증은 일 3권, 월 10권, 년 50권으로 제한됩니다.

    * 절판도서, eBook 등 일부 도서는 도서인증이 제한됩니다.

    닫기

    해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
    장바구니로 이동하시겠습니까?

    자료실