장바구니 담기 close

장바구니에 상품을 담았습니다.

RxJava 시작하기

RxJava 시작하기

  • 토마스닐드
  • |
  • 에이콘출판
  • |
  • 2019-07-24 출간
  • |
  • 496페이지
  • |
  • 188 X 235 X 24 mm
  • |
  • ISBN 9791161753270
판매가

33,000원

즉시할인가

29,700

카드할인

0원(즉시할인 0%)

적립금

1,650원 적립(5%적립)

배송비

무료배송

(제주/도서산간 배송 추가비용:3,000원)

추가혜택

네이버페이 무조건 1%적립+ 추가 1%적립

수량
+ -
총주문금액
29,700

이 상품은 품절된 상품입니다

※ 스프링제본 상품은 반품/교환/환불이 불가능하므로 신중하게 선택하여 주시기 바랍니다.

출판사서평




★ 이 책에서 다루는 내용 ★

■ Flowable, Single, Maybe, Completable을 포함해 핵심적인 변화를 가져올 RxJava2의 리액티브 타입에 대해 배운다.
■ 리액티브 프로그래밍의 동작방식과 반응형으로 사고하는 법을 배운다.
■ 옵저버블을 쉽게 설명하고 옵저버블을 어떻게 데이터와 이벤트 시퀸스로 표현하는지 알아본다.
■ 데이터와 이벤트 시퀸스를 변환, 필터링 및 조합하는 다양한 Rx연산자에 대해 알아본다.
■ 멀티캐스팅을 활용해 데이터를 다양한 지점으로 푸시하는 방법과 데이터를 전달하고 캐시하는 방법에 대해 알아본다.
■ RxJava에서 동시성과 병렬화가 작동하는 방식과 어떻게 기존의 복잡한 작업을 손쉽게 구현하는지 알아본다.
■ 안드로이드에서 RxJava와 Retrolambda를 사용해 더 나은 사용자 경험을 제공하는 반응형 안드로이드 앱을 만들어본다.
■ 코틀린의 확장 함수, 데이터 클래스 및 기타 기능을 사용해 RxJava의 사용을 더욱 자연스럽게 만들어본다.

★ 이 책의 대상 독자 ★

이 책은 자바의 핵심 기능과 객체지향 프로그래밍에 대한 기초 지식을 갖고 있는 자바 개발자를 대상으로 한다. 변수, 유형, 클래스, 속성, 메서드, 제네릭, 상속, 인터페이스, 정적 클래스/속성/메서드에 익숙해야 한다. 자바 표준 라이브러리가 제공하는 컬렉션(리스트, 세트, 맵)과 hashcode()/equals()를 사용한 객체의 동등성에 대해서도 잘 알아야 한다. 위에서 언급한 주제 중 하나라도 모르는 내용이 있다면 허버트 쉴트(Herbert Schildt)의 『Java: A Beginner"s Guide, Sixth Edition』(McGraw-Hill Education, 2014)을 통해 자바의 기초를 공부할 수 있다. 또한 조슈아 블로크(Joshua Bloch)의 『이펙티브 자바 2판』(인사이트, 2014) 역시 대부분의 자바 개발자의 책장에서 찾아볼 수 있는 고전이다. 이 책은 블로크가 인용하는 베스트 프랙티스를 지키기 위해서 노력할 것이다.
동시성에서 대해서 미리 알 필요는 없으며 RxJava 관점에서 다룰 것이다.

★ 이 책의 구성 ★

1장, ‘반응형으로 사고하기’에서는 RxJava에 대해 소개한다.
2장, ‘옵저버블과 구독자’에서는 옵저버블과 옵저버를 포함하는 RxJava의 핵심 유형에 대해 설명한다.
3장, ‘기본 연산자’에서는 신속하게 로직을 표현하고 생산성을 높여주는 핵심 연산자에 대해 철저하게 알아본다.
4장, ‘연산자 결합’에서는 다양한 방법으로 여러 개의 옵저버블 소스를 결합하는 방법을 배워본다.
5장, ‘멀티캐스팅, 전달 및 캐싱’에서는 여러 옵저버의 중복 작업을 방지하기 위한 스트림 통합과 전달 및 캐싱에 대해 알아본다.
6장, ‘동시성과 병렬처리’에서는 RxJava가 애플리케이션에서 유연하고 강력하게 동시성을 제공하는 방법에 대해 알아본다.
7장, ‘스위칭, 스로틀링, 윈도잉 및 버퍼링’에서는 빠르게 배출하는 옵저버블을 백프레셔 없이도 처리하는 방법에 대해 알아본다.
8장, ‘플로어블과 백프레셔’에서는 플로어블을 바탕으로 백프레셔를 활용하고 생산자가 컨슈머의 처리 속도보다 빠르게 배출하는 것을 막는다.
9장, ‘트랜스포머와 커스텀 연산자’에서는 리액티브 로직을 재활용하는 방법과 자신만의 RxJava 연산자를 생성하는 법에 대해 배운다.
10장, ‘테스트와 디버깅’에서는 효과적인 도구를 통해 RxJava 애플리케이션을 테스트하고 디버깅하는 방법에 대해 배운다.
11장, ‘안드로이드에서의 RxJava’에서는 지식을 안드로이드에 적용하는 방법과 RxAndroid 확장을 통해 안드로이드 앱을 최적화한다.
12장, ‘새로운 코틀린에 RxJava 사용하기’에서는 코틀린의 기능을 활용해 RxJava의 표현력을 향상시킨다.

★ 옮긴이의 말 ★

자바 개발자에게 널리 알려진 『리팩토링』(한빛미디어, 2012)을 저술한 마틴 파울러가 수석 과학자로 근무하고 있는 ThoughtWorks에서는 새로운 기술이 IT 업계에 미칠 영향을 매년 분석하고 있다. RxJava의 근간이 되는 ReactiveX는 2017년 ‘Adopt’ 판정을 받았는데, 이는 업계에서 사용을 권장하며 프로젝트에서 사용하고 있다는 뜻으로 ‘적극 권장’ 정도로 볼 수 있다(https://www.thoughtworks.com/radar/languages-and-frameworks/reactivex). 이 책에서 다루는 RxJava가 아니더라도 리액티브 프로그래밍은 분명히 배워둘 가치가 있는 영역이며, 더 많은 서비스나 라이브러리 등에서 사용될 것임이 분명하다. 하지만 프로젝트에 도입하려 해도 역시 리액티브 프로그래밍은 쉽지 않은 주제이다.
개인적으로는 리액티브 스타일의 프로그래밍에 익숙해지는 데 1년 정도가 소요됐다. 이제는 대략 에러 로그만 봐도 어디가 문제이고 무엇이 빠졌는지 신속히 판단할 수 있다. 하지만 리액티브 프로그래밍은 프로그래밍에 대한 접근 방식 자체의 변화가 필요하기 때문에 여전히 쉽지 않다. 초기에는 기존과 동일한 방법으로 문제를 처리하다가 여러 가지 크고 작은 실수가 있었다. 아마 여러분도 도입 결정 후 실제로 프로젝트를 진행하다가 많은 문제와 마주칠 것이다. 이때 옆에 든든한 멘토가 있다면 얼마나 다행일까? 하지만 소프트웨어 영역에서의 일반적인 멘토십은 스스로 깨우침(self-taught)을 얻을 수 있도록 도와주는 방식이 대부분이다. 그렇기 때문에 독자들이 문제에 직면했을 때 이 책이 많은 도움이 될 것이다. 공식 문서는 초보자가 쉽게 이해할 수 있도록 작성되지 않았다. 이 책은 RxJava를 좀 더 쉽게 시작하는 데 도움을 줄 것이다.
대부분의 역서는 번역이 끝나기가 무섭게 기억에서 빠르게 잊혀져 아쉬웠다. 그러던 참에 2019년 한 해에만 두 개의 리액티브 프로그래밍 책을 번역하게 되어 내심 반가웠다. 개인적으로 공부하던 주제이고, 때마침 새로운 증권 서비스에 도입하려고 하던 시점이어서 더욱 반가웠다.
더 많은 개발자가 리액티브 프로그래밍의 장점을 이해하고 사용자가 늘어나, 보다 개선됐으면 하는 기대를 담아 본다.


목차


1장. 반응형 사고
__RxJava와 리액티브 익스텐션의 간략한 역사
__반응형으로 사고
__RxJava를 배워야 하는 이유
____책에서 배우게 될 내용
__설정
____중앙 저장소 탐색
__RxJava 간단히 알아보기
__RxJava 1.0과 RxJava 2.0? 어떤 것을 사용해야 할까?
__언제 RxJava를 사용할 것인가?
__요약

2장. 옵저버블과 구독자
__옵저버블
____옵저버블은 어떻게 작동하는가?
____Observable.create() 사용
____Observable.just() 사용
__Observer 인터페이스
____옵저버 구현과 구독
____람다를 사용해 간결히 표현하는 옵저버
__콜드 옵저버블과 핫 옵저버블
____콜드 옵저버블
____핫 옵저버블
____ConnectableOvservable
__다른 옵저버블 소스
____Observable.range()
____Observable.interval()
____Observable.future()
____Observable.emtpy()
____Observable.never()
____Observable.error()
____Observable.defer()
____Observable.fromCallable()
__Single, Completable 그리고 Maybe
____Single
____Maybe
____Completable
__해지처리
____옵저버 내부에서 디스포저블 다루기
____CompositeDisposable 사용
____Observable.create()를 통한 해지처리
__요약

3장 기본 연산자 101
__억제 연산자
____filter()
____take()
____skip()
____takeWhile()과 skipWhile()
____distinct()
____distinctUntilChanged()
____elementAt()
__변환 연산자
____map()
____cast()
____startWith()
____defaultIfEmpty()
____switchIfEmpty()
____sorted()
____delay()
____repeat()
____scan()
__감축 연산자
____count()
____reduce()
____all()
____any()
____contains()
__컬렉션 연산자
____toList()
____toSortedList()
____toMap()과 toMultiMap()
____collect()
__복구 연산자
____onErrorReturn()과 onErrorReturnItem()
____onErrorResumeNext()
____retry()
__액션 연산자
____doOnNext(), doOnComplete() 그리고 doOnError()
____doOnSubscribe()와 doOnDispose()
____doOnSuccess()
__요약

4장. 연산자 결합
__병합 연산자
____Observable.merge()와 mergeWith()
____flatMap()
__연결 연산자
____Observable.concat()과 concatWith()
____concatMap()
__Ambigous 연산자
__지핑 연산자
__최근 배출 결합 연산자
____withLatestFrom()
__그루핑 연산자
__요약

5장. 멀티캐스팅, 전달 및 캐싱
__멀티캐스팅의 이해
____연산자를 이용한 멀티캐스팅
____멀티캐스팅의 사용 시점
__자동 연결
____autoConnect()
____refCount()와 share()
__재전송 및 캐싱
____재전송
____캐싱
__서브젝트
____PublishSubject
____서브젝트를 사용할 때
____서브젝트를 잘못 사용할 때
____서브젝트 직렬화
____BehaviorSubject
____ReplaySubject
____AsyncSubject
____UnicastSubject
__요약

6장. 동시성과 병렬처리
__동시성이 필요한 이유
__동시성 요약
____병렬처리 이해
__RxJava의 동시성 소개
____애플리케이션의 활성 상태 유지
__스케줄러에 대한 이해
____계산 스케줄러
____IO 스케줄러
____새로운 스레드
____싱글 스케줄러
____트램펄린
____ExecutorService
____스케줄러 시작과 종료
__subscribeOn() 이해
____subscribeOn()의 뉘앙스
__observeOn() 이해
____UI 이벤트 스레드에 대해 observeOn() 사용
____observeOn()의 주의 사항
__병렬처리
__unsubscribeOn()
__요약

7장. 스위칭, 스로틀링, 윈도잉 및 버퍼링
__버퍼링
____고정 크기 버퍼링
____시간 기반 버퍼링
____경계 기반 버퍼링
__윈도잉
____고정 크기 윈도잉
____시간 기반 윈도잉
____경계 기반 윈도잉
__스로틀링
____throttleLast()/sample()
____throttleFirst()
____throttleWithTimeout()/debounce()
__스위칭
__키 입력 그루핑
__요약

8장. 플로어블과 백프레셔
__백프레셔에 대한 이해
____백프레셔가 필요한 예제
____플로어블 소개
____플로어블과 백프레셔를 사용해야 하는 경우
__플로어블과 구독자의 이해
____구독자
__플로어블 생성하기
____Flowable.create()와 BackpressureStrategy 사용
____Observable을 Flowable으로 변환(또는 그 반대)
____onBackpressureXXX() 연산자 사용
____onBackPressureBuffer()
____onBackPressureLatest()
____onBackPressureDrop()
__Flowable.generate()의 사용
__요약

9장. 트랜스포머와 커스텀 연산자
__트랜스포머
____ObservableTransformer
____FlowableTransformer
____트랜스포머에서 상태공유 피하기
__to()를 사용해 이해하기 쉽게 전환하기
__연산자
____ObservableOperator 구현
____FlowableOperator
__Single, Maybe 및 Completable을 위한
__커스텀 트랜스포머 및 연산자
__RxJava2-Extras와 RxJava2Extensions 사용하기
__요약

10장. 테스트와 디버깅
__JUnit 설정
__블로킹 구독자
__블로킹 연산자
____blockingFirst()
____blockingGet()
____blockingLast()
____blockingIterable()
____blockingForEach()
____blockingNext()
____blockingLatest()
____blockingMostRecent()
__TestObserver와 TestSubscriber 사용
__TestScheduler를 통한 시간 조작
__RxJava 코드 디버깅
__요약

11장. 안드로이드에서의 RxJava
__안드로이드 프로젝트 만들기
____Retrolambda 설정
____RxJava 및 기타 라이브러리의 구성
__RxJava와 RxAndroid 사용
____RxBinding의 사용
__다른 RxAndroid 바인딩 라이브러리
__안드로이드에서 RxJava의 라이프 사이클과 주의 사항
__요약

12장. 새로운 코틀린에 RxJava 사용
__코틀린 사용 이유
__코틀린의 구성
____그레이들에서 코틀린의 구성
____메이븐에서 코틀린의 구성
____RxJava 및 RxKotlin의 구성
__코틀린의 기초
____코틀린 파일 만들기
____속성과 변수 할당
____확장 함수
____코틀린 람다
__확장 연산자
__RxKotlin의 사용
__SAM
__let()과 apply()
____let() 사용
____apply() 사용
__튜플과 데이터 클래스
__ReactiveX와 코틀린의 미래
__요약

교환 및 환불안내

도서교환 및 환불
  • ㆍ배송기간은 평일 기준 1~3일 정도 소요됩니다.(스프링 분철은 1일 정도 시간이 더 소요됩니다.)
  • ㆍ상품불량 및 오배송등의 이유로 반품하실 경우, 반품배송비는 무료입니다.
  • ㆍ고객님의 변심에 의한 반품,환불,교환시 택배비는 본인 부담입니다.
  • ㆍ상담원과의 상담없이 교환 및 반품으로 반송된 물품은 책임지지 않습니다.
  • ㆍ이미 발송된 상품의 취소 및 반품, 교환요청시 배송비가 발생할 수 있습니다.
  • ㆍ반품신청시 반송된 상품의 수령후 환불처리됩니다.(카드사 사정에 따라 카드취소는 시일이 3~5일이 소요될 수 있습니다.)
  • ㆍ주문하신 상품의 반품,교환은 상품수령일로 부터 7일이내에 신청하실 수 있습니다.
  • ㆍ상품이 훼손된 경우 반품 및 교환,환불이 불가능합니다.
  • ㆍ반품/교환시 고객님 귀책사유로 인해 수거가 지연될 경우에는 반품이 제한될 수 있습니다.
  • ㆍ스프링제본 상품은 교환 및 환불이 불가능 합니다.
  • ㆍ군부대(사서함) 및 해외배송은 불가능합니다.
  • ㆍ오후 3시 이후 상담원과 통화되지 않은 취소건에 대해서는 고객 반품비용이 발생할 수 있습니다.
반품안내
  • 마이페이지 > 나의상담 > 1 : 1 문의하기 게시판 또는 고객센터 1800-7327
교환/반품주소
  • 경기도 파주시 문발로 211 1층 / (주)북채널 / 전화 : 1800-7327
  • 택배안내 : CJ대한통운(1588-1255)
  • 고객님 변심으로 인한 교환 또는 반품시 왕복 배송비 5,000원을 부담하셔야 하며, 제품 불량 또는 오 배송시에는 전액을 당사에서부담 합니다.