관리 메뉴

hyeals study

RxJava??? 본문

안드로이드

RxJava???

hyeals 2021. 2. 6. 23:02

안드로이드 개발을 하면 RxJava라는 단어를 한 번쯤은 보게 된다. 대체 어떤 상황에서 뭘 위해 쓰는지 공부해보고 싶어 조금씩 알아가려한다!!

 

RxJava를 왜 사용할까?

RxJava의 장점이라 하면 개발자들이 부딪힐 수 밖에 없는 문제인

1. 동시성의 문제

2. 다중 이벤트 처리 문제

3. 백그라운드 처리 문제

등의 여러 경우에서 문제를 편리하게 해결할 수 있도록 도와준다!

 

추가적으로 안드로이드 개발의 경우 화면을 변경할 수 있는 것은 메인 스레드 뿐이기 때문에 비동기 처리를 해야하는 경우가 아주 빈번하다. 이때 Rx를 이용한다면 이 어려운 작업들을 쉽게 할 수 있다. 또 새로운 프로세스가 추가되거나 삭제 되어야 한다면 로직의 큰 변경 없이 간단히 수정할 수가 있다.

(아마 이 부분은 Rx가 선언적 프로그래밍 및 함수형 프로그래밍 기법을 사용해서 그런 것 같다!)

 

 

이제 본격적으로 RxJava를 알아보자!

RxJava를 이해하기 위해서는 일단 리액티브 프로그래밍이라는 것을 알아야한다.

 

과거의 Application은 클라이언트의 요청을 서버가 처리하고 클라이언트는 서버가 요청을 처리할 때까지 기다렸다가 처리가 끝났을 때 서버로부터 응답을 받아서 결과를 렌더링하는 동기식 구조였다.

 

그러나, 

 

요즘에는 Application의 규모가 커졌다. 당연하게도 Application은 복잡해졌고, 비동기식 요청을 처리해야만 하는 시대가 됐다.

 

리액티브 프로그래밍은 이런 비동기식 요청을 효과적으로 처리하기 위한 비동기 프로그래밍을 위한 API이다.

 

또한, RxJava는 이런 리액티브 프로그래밍 방식을 구현한 확장 라이브러리다!

좀 더 자세히 말하자면 RxJava는 ReactiveX(Reactive Extensions)를 JAVA로 구현한 라이브러리다.

 

(여기서 Reactive란 무엇일까?

ReactiveX는 관찰가능한(Observable)스트림을 사용하는 비동기 프로그래밍을 위한 API다.)


+ 좀 더 자세하게 알아보는 리액티브 프로그래밍(= 반응형 프로그래밍)

 

리액티브 프로그래밍을 위키피디아에 검색하면 아래와 같이 나온다.

 

???

이 내용이 좀 어려운 것 같다. 조금 뜻을 찾아보면 아래와 같다.

 

- 변경 전파 및 데이터 흐름: 데이터가 변경될 때 마다 이벤트를 발생시켜서 데이터를 계속적으로 전달하는 것(이벤트를 모니터링 하고 있는 쪽은 이벤트가 발생할 때 마다 해당 데이터를 계속적으로 전달받음)

 

- 명령형 프로그래밍: 실행할 동작을 구체적(EX. 알고리즘)으로 명시하는 프로그래밍 방식(예: Java)

- 선언적 프로그래밍 패러다임: 명령형 프로그래밍과 달리 단순히 목표를 선언하는 방식(예: RxJava)


리액티브의 개념이 적용된 예시

- 일반적으로 Application은 push방식pull방식으로 나뉠 수 있다.

 

push방식: 데이터의 변화가 발생했을 때 변경이 발생한 곳에서 데이터를 보내주는 방식

☞ 이게 리액티브 방식이라고 할 수 있다.

 

예시

1. RTC(Real Time Communication)

아파치 스톰같은 오픈소스를 이용하면 실시간 통신을 구현할 수 있는데 실시간 통신은 데이터를 직접 push해서 전달하는 방식이다.

 

2. 소켓 프로그래밍 

채팅 프로그램에서 많이 사용한다. A라는 클라이언트에서 데이터를 보내면 이 데이터를 서버 쪽에서 받아서 B라는 클라이언트에게 직접 push해준다.

 

3. DBTrigger

프로시저 등에서 데이터베이스의 컬럼에서 변경된 데이터에 대한 이벤트를 모니터링하고 있다가 그 이벤트가 발생했을 때 후속처리를 하는 방식

 

4. Spring의 ApplicationEvent

어떤 객체에서 ApplicationEvent를 모니터링 하고 있다가 이벤트가 발생하면 후속 처리를 한다.

 

5. Angular의 데이터 바인딩

데이터의 변경이 발생했을 경우에 view를 업데이트 해주는 방식이다.

 

6. 스마트폰의 push메시지

스마트폰의 사용자가 어떤 변경된 push메시지가 있는지 서버측에 물어보는것이 아닌, 서버 측에서 스마트폰에 변경된 push 메시지를 전송해주면 사용자가 알림을 받아서 push메시지를 확인하는 방식이다.

 

pull방식: 변경된 데이터가 있는지 요청을 보내 질의하고 변경된 데이터를 가져오는 방식이다.

예시

1. 클라이언트 요청&서버 응답 방식의 Application

 

2. Java와 같은 절차형 프로그래밍 언어

특정 메소드를 호출해서 리턴값을 반환 받는 절차

 

개념을 어느정도 정리한 것 같으니 다음 포스팅에서는 직접 코드를 구현하면서 RxJava에 대해 알아볼 예정이다!


 

blog.yena.io/studynote/2020/10/11/Android-RxJava(1).html

 

[Android] RxJava 시작하기

RxJava, RxAndroid 시작하기 안드로이드 개발을 하다보면 언젠가는 RxJava와 만나게 된다. 이미 몇 년 전부터 많은 프론트 개발자들이 사랑사용해 온 라이브러리이기 때문이다. 현재 회사 프로젝트에

blog.yena.io

 

 

+ Kevin의 알기쉬운 RxJava - 리액티브 프로그래밍이란? (youtube) 

Comments