앞으로 이 카테고리에서는 자바에서 반응형 프로그래밍(리액티브 프로그래밍)을 하기위해서 사용하는 ReactiveX에 관한 포스팅을 진행해나갈 생각이다.
처음에 책 한권을 추천받아서 읽기시작했으나 책에는 축약이 많아서 이해하기 어려웠다.
따라서 공식문서와 함께 공부하기 시작했는데 스스로 도움이 많이 되어 공부한 것을 가지고 블로그 포스팅까지 해보려고 한다.
리액티브 프로그래밍이란 한국어로 반응형 프로그래밍이라고도 불리며, 데이터의 흐름과 전달에 관한 프로그래밍 패러다임이다.
기존에는 프로그래머가 작성한 코드가 순서대로 실행되는 방식이었다면,
리액티브 프그래밍은 데이터의 흐름을 정의하고 데이터의 변화에 따라서 관련된 수식이나 함수가 업데이트 되는 방식이다.
일종의 옵저버 패턴으로 볼 수 있다.
자바언어와 리액티브 프로그래밍에는 두 가지 관계가 있다.
이 두가지에 대해서 하나씩 설명해보겠다.
예를 들어서 1월과 2월의 매출액의 총합을 구하는 경우, 1월이나 2월의 매출액이 바뀔 경우 바뀐 데이터를 다시 가져와서 매출액의 총합을 다시 계산하게 된다. 즉, 이것은 pull 방식이다.
반면에 리액티브 프로그래밍에서는 데이터가 변경된 곳에서 변경된 데이터를 전달하는 push 방식이다.
즉, 기존의 자바 프로그래밍이 pull 방식이라면 리액티브 프로그래밍은 push 방식이다.
콜백이나 옵서버 패턴의 경우 스레드가 여러개인 경우에 데이터 동기화 등의 문제가 발생할 수 있다. 하지만 함수형 프로그래밍은 이러한 부수 효과(Side Effect)가 없다.
함수형 프로그래밍은 부수 효과(Side Effect)가 없는 순수 함수를 지향한다.
따라서 멀티 스레드 환경에서도 안전하다.
자바 언어로 리액티브 프로그래밍을 하기 위해서는 함수형 프로그래밍의 지원이 필요하다.
리액티브 프로그램은 주변의 환경과 끊임없이 상호작용하면서 프로그램이 주도하는 것이 아니라 환경이 변하면 이벤트를 받아 동작한다.
애플리케이션에서 리액티브 프로그래밍을 하려면 데이터 소스를 정의할 수 있고, 데이터 소스의 변경사항을 받아서 프로그램에 알려줄(push)할 존재가 필요하다. 이것을 JVM위에 자바 언어로 구현해놓은 라이브러리가 RxJava이다.
1) 동시성을 적극적으로 끌어안을 필요가 있다.
2) 자바 Future을 조합하기 어렵다는 점을 해결해야 한다.
3) 콜백 방식의 문제점을 개선해야 한다.
지금까지 리액티브 프로그래밍이 무엇인지, 그리고 자바 언어와 리액티브 프로그래밍의 관계, 그 속에서 RxJava 라이브러리가 무슨 역할을 하는지를 알아보았다.
다음 포스팅에서는 본격적으로 RxJava를 이용한 리액티브 프로그래밍에 대해 차근차근 알아보도록 하겠다.
이 포스팅은 RxJava 프로그래밍 책을 참조하여 쓰여졌습니다.