-
-
RxJava 프로그래밍 - 리액티브 프로그래밍 기초부터 안드로이드까지 한 번에
유동환.박정준 지음 / 한빛미디어 / 2017년 9월
평점 :
절판
여기저기에서 리액티브 프로그래밍과 함수형 프로그래밍에 대해서 많이 들어오면서 관심이 생기던 찰나에, 한빛미디어에서 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를 처음 알아가는 사람들에게 안성맞춤인 책입니다. 함수형 프로그래밍, 람다 표현식에 대해 전혀 알지 못해도 차근차근 따라하면서 점차 이해를 할 수 있어서 매우 좋습니다.