버그 잡이

[RxJava] 리액티브 프로그래밍이란? RxJava란? 본문

모던 안드로이드/RxJava

[RxJava] 리액티브 프로그래밍이란? RxJava란?

버그잡이 2020. 4. 27. 22:17

리액티브 프로그래밍이란?

 

Declarative programming concerned with data stream and the propagation of change

 

두 가지 키워드로 리액티브 프로그래밍을 이해해보자.

 

 

1. Declarative programming(선언형 프로그래밍) 

 

 우리가 흔히 하는 프로그래밍은 명령형 프로그래밍이다. 명령형 프로그래밍이란 '실행할 동작을 구체적으로 명시하고 이를 실행하는 프로그램'이다. 예를 들어 sum()이라는 함수가 있고 sum(){number += 1} 처럼 실행할 동작이 구체적으로 명시되어있다.

 반면, 선언형 프로그래밍은 단순히 목표를 선언하는 것이다. 명령형 처럼 구체적인 동작이 명시되어 있지 않다.

 

 명령형은 How , 선언형은 What 에 비유할 수 있다.

 

(예제를 통해서 살펴보자)

 

  • 명령형 방식 (HOW) : "12번 테이블 자리가 비어있습니다. 나와 우리 가족은 저 자리로 걸어가 앉을 것입니다."
  • 선언형 방식 (WHAT) : "네 명 앉을자리를 부탁해요"

예제를 살펴보니 어떤 느낌인지는 알겠다. 그런데 "그럼 자리에 앉는 방법은 누구 알고 있어?"

 

선언형 방식이 제대로 동작하기 위해서는 명령형으로 "어떻게"가 구현된 것들이 추상화되어 있어야 한다.

즉, 추상화 되어있는 것을 사용하거나, 추상화시켜 사용한다.

 

"왜 선언형 방식을 사용할까?"

 

-> 코드의 가독성이 좋다.

 

출처: https://boxfoxs.tistory.com/430 [박스여우 - BoxFox]

 

 

 

 

2. data stream and the propagation of change(변화와 데이터 흐름)

 

#해석1. 데이터가 변경될때 마다 이벤트를 발생시켜서 데이터를 계속적으로 전달한다.

 

음... 정확히 이해가 안 된다. 일단은 위 해석만 봐서는 옵저버 패턴을 이야기 하는 것 같다. Reactive programming 말 그대로 데이터의 변화에 반응해서 동작하는 프로그래밍(?)

 

#해석2. "반응형 프로그래밍은 함수형 프로그래밍 언어의 도구들을 가지고 데이터 흐름을 composable하게 구현하는 것입니다." - https://brunch.co.kr/@yudong/33

 

한 책에 나온 문구라고 한다. 위 문장을 보면 데이터 흐름을 "조작"할 수 있는 것 같다.

 

 

 

 

 

RxJava란?

 

"리액티브 프로그래밍을 도와주는 라이브러리"

 

 

 

 

RxJava를 왜 알아야하는가?

 

제일 중요한 이유는 수많은 채용공고에서 RxJava 관련 지식을 요구하고 있다.

(물론 기업에서 쓰는 이유가 있겠지?)

 

 

 

RxJava의 장점

 

1. operator

 

operator를 활용하여 관찰가능한 객체(observable)를 쉽게 만들 수 있다.

 

- list, array, custom data object를 observable로 만들 수 있고

- 여러개의 observable을 하나로 합치고 

- filter를 적용하여 원하는 data만 받을 수도 있다.

 

 

2. Threading

 

 백그라운드 스레드와 메인 스레드를 쉽게 오갈 수 있다.

 

예를 들어, 백그라운드에서 작업을 진행하고 결과를 메인 스레드에서 반영한다. 

물론 AsyncTask를 이용하여 이런 작업이 가능하지만 훨씬 간단하게 작업할 수 있다.

 

 

 

 

 

"옵저버 패턴하면 LiveData 아닌가?"

 

맞다. 데이터의 변화를 관찰하고 이에 반응하는 옵저버로써의 기능은 LiveData를 사용하는 것이 좋다.

하지만 RxJava는 위에서 언급한 것과 같은 장점들 때문에 아직도 현업에서 많이 쓰이고 이를 요구하고 있는 상황이기 때문에 공부할 가치가 있다.

 

 

 

 

*참고 사이트

 

https://www.youtube.com/watch?v=2McwNWO8MIw

https://codingwithmitch.com/courses/rxjava-rxandroid-for-beginners/

 

 

 

반응형
Comments