Groo

Observable 클래스의 기본 본문

프로그래밍 언어/Java

Observable 클래스의 기본

김주엽 2020. 10. 24. 22:17

안녕하세요, 오늘은 이전에 설명했던 RxJava에 대해 조금 더 깊이 알아보도록 하겠습니다.
오늘의 주제는 RxJava의 핵심이라고 할 수 있는 Observable 클래스에 대해 살펴보겠습니다.

📊 RxJava 버전 1과 2의 데이터 소스 차이

기존의 RxJava 버전 1에서는 데이터 소스를 Observable 클래스와 Single 클래스로 구성했습니다. RxJava 버전 2에서도 여전히 두 클래스가 존재하기는 하지만 Observable 클래스를 상황에 맞게 조금 더 편리하게 사용하기 위해 3개로 세분화하였습니다.

 

 

Observable 클래스

관찰대상이 데이터의 흐름에 맞게 알림을 보내 관찰자가 그에 따른 데이터를 처리할 수 있도록 합니다.
Maybe 클래스

reduce, firstElement 함수와 같이 데이터가 발행되거나 또는 발행되지 않고도 완료되는 경우입니다.
Flowable 클래스

Observable 클래스에서 관찰대상이 데이터를 발행하는 속도가 관찰자가 데이터를 처리하는 속도보다 현저히 빠른 경우 발생하는 배압 이슈에 대응하기 위한 기능을 추가로 제공해주고 있습니다.

위의 설명과 같이 RxJava 버전 1에서 2로 업데이트되면서 Observable 클래스가 3개의 클래스로 세분화되었습니다. 그중 가장 중요한 클래스는 당연히 Observable 클래스입니다. RxJava 프로그래밍은 Observable 클래스에서 시작해 Observable 클래스로 끝난다고 해도 과언이 아닐 정도로 정말 중요하기에 오늘은 이 Observable 클래스에 대해서 집중적으로 알아보도록 하겠습니다.

📸 Observable 클래스

Observable 클래스는 옵서버 패턴을 구현합니다. 옵서버 패턴은 관찰대상의 상태 변화를 관찰하는 관찰자를 관찰대상에게 등록하며 만약 관찰대상에게 상태 변화가 발생했을 때 지정된 특정 메서드를 호출하여 관찰대상이 관찰자에게 변화를 알려주는 구조입니다.

 

앞으로 옵서버 패턴과 Observable 클래스에 대해 조금 더 쉽게 이해하기 위해서는 아래의 몇 가지 헷갈리는 관련 용어들을 잘 숙지하는 것이 중요합니다. 아래의 용어들은 거의 비슷하지만 조금씩 차이가 존재하기에 헷갈리지 않도록 주의해주시기 바랍니다.

 

Observer Observable Observed
관찰자 관찰대상 관찰결과

 

먼저 Observer는 관찰자라는 뜻을 가지며 관찰대상을 관찰하는 역할을 합니다. 그리고 Observable은 관찰대상을 의미하며 실질적으로 Observer라는 관찰자에게 관찰당하는 대상이 됩니다. 원래 옵서버 패턴과 같은 경우는 Observer 및 Observable로만 구성되어 있지만 옵서버 패턴을 상세히 설명하기 위해 Observed라는 용어를 추가적으로 도입했으며 옵서버 패턴의 이해를 돕습니다.

 

옵서버 패턴의 대표적인 예로는 사용자가 버튼을 클릭 시 미리 등록해 둔 onClick 메소드가 호출되는 것과 같습니다. Observable 즉 관찰대상의 상태가 변화되는 것이 감지될 시 해당 Observer 관찰자에게 아래와 같은 세 가지의 알림을 전달하고 있습니다.

 

onNext 이벤트

Observable 관찰대상의 상태가 변화될 시 데이터의 발행을 알립니다.
onComplete 이벤트

Observable 관찰대상의 데이터 발행이 모두 완료했음을 알립니다.
onError 이벤트

Observable 관찰대상이 어떤 이유로 에러가 발생했음을 알립니다.

onNext 이벤트와 같은 경우 Observable 관찰대상의 상태가 변화될 시 매번 알림이 발생하지만 onComplete 이벤트는 Observable 관찰대상의 데이버 발행이 모두 완료했을 때 단 한 번만 발생하며 그 후에는 onNext 이벤트가 발생하지 않습니다.

 

그러나 반면에 onError 이벤트는 Observable 관찰대상에서 어떤 이유로 에러가 발생했을 때 이벤트가 발생하며 onError 이벤트 이후에는 onNext, onComplete 이벤트가 발생하지 않고 Observable 관찰대상의 실행이 종료되도록 구현되어있습니다.

👍 글을 마치며

이렇게 오늘 RxJava에서 가장 중요하다고 할 수 있는 Observable 클래스에 대해 알아보았습니다. Observable 클래스의 가장 기초적인 내용에 대해서 이야기했으며 다음 시간에는 Observable 클래스를 조금 더 확장하여 이를 구현하는 다양한 종류의 팩토리 함수에 대해 자세히 살펴보도록 하겠습니다. 앞으로 배울 수 많은 내용들은 Observable 클래스에 대한 기초적인 개념을 바탕으로 모든 설명이 진행되니 오늘 배운 내용을 잘 숙지하고 자신만의 것으로 만든 후 앞으로의 내용을 순차적으로 공부하시기 바랍니다.

 

참고 : RxJava 프로그래밍

'프로그래밍 언어 > Java' 카테고리의 다른 글

Observable 클래스의 팩토리 함수 (1)  (0) 2020.12.06
열거형 Enum 클래스  (1) 2020.09.26
RXJava 소개  (0) 2020.08.25
문자열 형 변환의 종류 및 차이점  (2) 2020.06.18
Comments