본문 바로가기

LANGUAGES, METHODLOGY/RxJava

[RxJava] RxJava 첫걸음. RxJava란 무엇인가?

RxJava의 첫발을 떼기 위해 책을 구입했던지는 오래되었으나,

 

골랐던 책의 난해함(다짜고짜 자, 코딩해봅시다)때문에 진도를 나가기가 어려웠고,

 

그러한지 몇개월 뒤 다시 손쉽고 국내 개발자분들이 쓴 좋은 책을 접하게 되어 드디어 첫발을 떼게 되었다.

(이것마저 사실 책을 산지 어언 한달만의 일..)

 

http://www.hanbit.co.kr/store/books/look.php?p_code=B3448548347

 

RxJava 프로그래밍

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

www.hanbit.co.kr

첫 챕터를 마치고 두번째 챕터에 접어든 찰나, 첫 챕터를 다시 리뷰하며 머릿속에 넣어보고자

 

포스트를 작성하기로 했다.

 

전체적인 내용을 What, Why, How로 정리해 세 묶음으로 한번 적어보고자 한다.

 

 

 


1.  WHAT is Reactive Programming? 

 

먼저 리액티브 프로그래밍이란 무엇인가? 에 대해 간단히 정리하자면.

 

  • 기존의 명령형 프로그래밍이 ORDER FIRST 였다면, 리액티브 프로그래밍은 DATA FIRST다.

명령형 프로그래밍과 비교해 데이터의 종류와 데이터의 흐름을 먼저 정의하고, 이를 처리하는 구조를 만드는 것이

 

리액티브 프로그래밍의 주된 굴지라고 하면 되겠다.

 

2. Why use Reactive Programming?

 

우선 책에서는 '넷플릭스'가 언급했던 RxJava 도입의 이유를 인용해 설명하고 있는데

 

  • RxJava는 자바의 동시성 처리 이슈를 해결해 준다.
  • RxJava는 다수의 비동기 흐름을 가능하게끔 해준다.(자바8에서는 불가능한 일이었다고 함.)
  • RxJava는 개발자와 프로그램을 콜백 지옥으로부터 탈출시키게끔 해준다

세가지 이유를 들고 있다.

 

 

우선 동시성 처리와 비동기흐름을 묶어 기존에 알고있던 상식과 묶어 설명해보면,

 

기존의 명령형 프로그래밍은 다수의 Thread가 돌아가면서 명령을 처리할 때, 같은 데이터를 참조하는 일이 생길때

 

경쟁구도에 빠지기 때문에, 데이터 참조에서 생기는 오류는 물론, 리소스 사용에 있어서도 비효율적인 측면이

 

생길 수 있다는 점이 있다.

 

 

반면 RxJava를 사용할 때의 장점은 이러한 Thread형태의 동기식 프로그래밍이 아닌 비동기식 프로그래밍이

 

가능하기 때문에, 이러한 기존의 동기식 프로그래밍의 단점을 상쇄시켜줄 수 있다는 것이다.

 

 

아까 리액티브 프로그래밍이란 무엇인가의 내용을 끌어와 말하자면, 전체 프로그래밍 흐름의 주체가

 

Thread에게 있는게 아니라 데이터에 있다는 것이다.

 

 

이를 지인에게 설명하고자 했던 적이 있는데, 어떤 사람이 무음으로 된 핸드폰을 두고 카톡이 왔는지

 

5초 간격으로 스마트폰을 보는것이 동기식 프로그래밍이라면

 

비동기식 프로그래밍은 스마트폰을 소리를 켜두고 신경을 쓰지 않고 있다가 소리(새로운 카톡이자 새로운 데이터)가

 

들리면 스마트폰을 보는 것이다.. 라는 식으로 설명했던 적이 있다. (분명한 예인지는 계속 스터디를 해봐야겠지만)

 

 

3. How to use Reactive Programming?

 

1번 2번을 거치면서 Reactive programming에서 데이터가 차지하는 위치에 대해서 잘 이해가 됬다고 생각한다.

 

그럼 이제 이 데이터를 어떻게 만들고 실제로 사용하는가?

 

우선 모든것은 Observable이라는 클래스로부터 시작된다.

 

Observable은 데이터의 소스이자 데이터의 종류와 갯수, 데이터의 끝에서의 동작(onComplete)과

 

오류시의 동작(onError)를 정의할 수 있다.

 

말대로 관찰할 수 있는 '대상' 이라고도 이해하면 되겠다.

 

 

자, 이제 Observable이라는 소스를 어떻게 관찰하냐. RxJava에서는 관찰하겠다는 행위를

 

subscribe()로써 수행한다.

 

Observable에 정의된 데이터들은 정의된 대로 그대로 차곡차곡 쌓여있다가, subscribe가 수행되는 순간

 

이를 subscribe한 대상에게 차례로 쏘아지게 된다.

 

 

일단 리액티브 프로그래밍과 RxJava의 첫만남을 마무리짓기엔 이정도로 충분하다고 생각하며,

 

앞으로 더더욱 흥미로운 RxJava의 세계로 찬찬히 나아가보고자 이쯤에서 포스트를 마무리짓고자 한다.

 

 

기존의 학부에서는 그다지 인연이 없던 '함수형 프로그래밍' 이자 '비동기식 프로그래밍'의 구조를 짜고

 

이해한다는 게 생각보다 재밌다는 점이 RxJava를 처음 들어가고 나서 느끼고 있는 점이다.

 

다만 책에서는 RxJava의 러닝커브에 대해서 우선적으로 경고하고 있으니, 앞으로 진행하며 이해하기 어렵고

 

난이한 면들이 도사리고 있을 가능성이 높아보이지만, 즐겁고 재밌어보이는 프로그래밍을 개발자가 마다할 일이

 

어디 있겠는가? 라는 각오를 하며 다음 챕터를 펼쳐본다!

 

 

< 참조 > RxJava 프로그래밍 - 유동환,박정준 지음. 한빛미디어

http://www.hanbit.co.kr/store/books/look.php?p_code=B3448548347

 

RxJava 프로그래밍

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

www.hanbit.co.kr