RxJava 공부를 시작하며
들어가는 글: 저는 안드로이드 개발자입니다. 안드로이드 N(누가)에서는 Java8을 지원하고 앞으로는 함수형 프로그래밍도 자바 개발자들에게 서서히 확산될 것 같습니다. 요즘 반응형 프로그래밍(Reactive Programming)이 뜨고 있습니다. 이게 무엇인지.. 저도 공부하면서 몇자 적어보려고 합니다.
새로운 개념을 공부할 때 가장 좋은 방법은 잘 정리된 책을 읽어보는 것입니다.
그래서 저는 유일한 번역서인 "RxJava Essentials"을 읽어보았습니다.
몇일 동안 주욱 끝까지 읽어봤는데.. 한마디로 "왜 쓰는거지?"라는 의문을 지울 수 없었습니다.
어디에 쓸 수 있을까요?
저는 책만 읽었고 실무에서는 사용해보지 않아서 그럴수도 있을 것 같습니다.
책에 나오는 반응형 프로그래밍(Reactive Programming)의 정의에 대해서 적어보겠습니다.
"리액티브 프로그래밍(Reactive Programming)은 비동기 데이터 흐름(data flow)에 기반을 둔 프로그래밍 패러다임이다. 데이터 흐름은 마치 강과 같아서 이를 관찰하거나 필터링하거나 다룰 수 있으며 새로운 사용자를 위한 새로운 흐름을 만들기 위해 다른 흐름과 병합할 수도 있다." (21p)
음.. 무슨 얘긴지 모르겠습니다.
그래서 이번에는 인터넷 강좌를 찾아보기 시작했습니다.
구글링하여 "rxjava"를 검색해보니 아래와 같은 문서를 찾을 수 있었습니다.
차근차근 다 읽어보았습니다.
(한국어 자료)
RxJava with Android - 0 - 시작에 앞서 [링크]
RxJava with Android - 1 - RxJava 사용해보기 [링크]
(영어 자료) : 정말 잘쓴 글입니다!!
Grokking RxJava, Part 1: The Basics [링크]
Grokking RxJava, Part 2: Operator, Operator [링크]
Grokking RxJava, Part 3: Reactive with Benefits [링크]
Grokking RxJava, Part 4: Reactive Android [링크]
이렇게 관련된 문서를 읽고나니 조금씩 이해가 되기 시작합니다. 기존의 프로그래밍과 어떻게 다른 지 조금은 알 것 같습니다.
제 나름대로 정의를 해보겠습니다.
>> 명령형 프로그래밍은 우리가 지금까지 해온 C/C++, Java라고 생각하면 됩니다. 내가 원하는 동작을 하나씩 구구절절 프로그래밍하는 것입니다. 변수, for, if, while 등의 제어문을 사용합니다. 예를 들어 구구단을 for 뺑뺑이 두개 돌려서 짜는 방식입니다. 이것을 지양합니다.
>> 명령형 프로그래밍의 반대말은 선언형(declarative) 프로그래밍입니다. 대표적인 예로 SQL이 있습니다. 반응형 프로그래잉은 선언형 프로그래밍을 지향합니다.
>> 함수형 언어는 함수를 단지 호출하는 대상이 아닌 변수로도 할 수 있고 인자로도 넘길 수 있고 등등 (저도 함수형 프로그래밍엔 초보라 표현력이 떨어지네요) 마음대로 지지고 볶고 할 수 있습니다. (어려운 말로 일급 시민(first class citizen)이라고 표현합니다)
>> 반응형 프로그래밍은 함수형 언어의 도구들을 자유자재로 활용해야 합니다. 예를 들어 Java8에 도입된 람다 표현식은 반드시 알고 있어야 합니다.
>> 사실 반응형 프로그래밍을 공부할 때 가장 와닿지 않는 말입니다. 데이터 흐름에서 시작되지 않는 프로그램이 어디 있나요? 가장 간단한 로그인 화면을 구현할 때도 사용자의 ID와 비밀번호라는 엄연한 데이터 흐름이 존재합니다. 사용자 클릭도 데이터 흐름입니다.
>> 반응형 프로그래밍은 함수형 프로그래밍 언어의 도구들을 가지고 데이터 흐름을 composable하게 구현하는 것입니다.
또다시 어려운 말을 썼는데요,
제가 이해한 것이 아직 많지 않아서 그럽니다.
반응형 프로그래밍을 공부할 때 Observable이니 Subscriber니 Oberserver 패턴이니 등등의 단어부터 시작하면 오히려 그 본질을 이해하기 어려울 것 같습니다.
앞으로 실무에서 "반응형 프로그래밍"을 어떻게 구사하면 좋을지 '처음 공부하는 사람'의 시각으로 차근차근 알아보도록 하겠습니다. 기대해 주세요.
2016.9.14 @Home