Notice
Recent Posts
Recent Comments
Link
투케이2K
12. (TWOK/STUDY) [투케이 학습] : Rx - Reactive Programming 반응형 프로그래밍 학습 정리 본문
투케이2K 학습정리
12. (TWOK/STUDY) [투케이 학습] : Rx - Reactive Programming 반응형 프로그래밍 학습 정리
투케이2K 2023. 8. 22. 21:27[제 목]
[투케이 학습] : Rx - Reactive Programming 반응형 프로그래밍 학습 정리
[설 명]
[1] : 반응형 프로그래밍 (Reactive Programming) / Rx 설명
- 반응형 프로그래밍 (Reactive Programming) :
- 반응형 프로그래밍 이란 데이터 흐름과 전달에 관한 프로그래밍 패러다임 입니다 (Observer Pattern 옵저버 패턴에 기반)
- 반응형 프로그래밍 은 데이터의 흐름을 먼저 정의하고, 데이터가 변경되었을 때 [연관된 작업] 을 수행합니다
- 반응형 프로그래밍 은 프로그램이 주도하는 것이 아니라 환경이 변하면 이벤트를 받아 동작하도록 만드는 프로그래밍 기법 입니다
- Rx (ReactiveX) :
- ReactiveX 는 관찰가능한 절차를 통해 비동기, 이벤트 기반 프로그램을 구성하기 위한 라이브러리 입니다
- ReactiveX 는 Observer Pattern 옵저버 패턴 을 확장하며, Sequence 를 조합할 수 있는 연산자를 지원 합니다
- ReactiveX 는 low-level Thread, 동기화, Thread 안전성, non-blocking I/O에 관한 우려를 줄입니다
- RxJava (Reactive java) :
- Reactive Programming 패러다임을 자바에서 구현한 프로그래밍 라이브러리 입니다
- RxJava 는 함수형 프로그래밍 방식을 도입했으며, Side Effect 가 없는 순수 함수를 지향하기 때문에 Thread-Safe 합니다
- RxAndroid (Reactive Android) :
- RxJava에 안드로이드용 스케줄러 등 몇 가지 클래스를 추가해 안드로이드 개발을 쉽게 해주는 라이브러리 입니다
[2] : Rx 작성을 위한 Build Gradle 기본 환경 구성 방법
- 툴 : AndroidStudio
- build.gradle 파일 dependencies :
- implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
- implementation 'io.reactivex.rxjava3:rxjava:3.0.7'
- implementation 'io.reactivex.rxjava3:rxkotlin:3.0.1'
[3] : Observable 구분 종류 설명 (Cold / Subject)
- RxJava 의 Observable 에는 [Cold (차가운) : Observable] / [Hot (뜨거운) : Subject] 두 종류의 Obsevable 이 있습니다
- Observable / Subject 차이점 :
- [구독자 등록 기준] : [Observable] : 적어도 한 명의 관찰자가 있을 때 코드가 실행 (구독하기 전까지 데이터를 방출하지 않음)
- [구독자 수 기준] : [Observable] : 유니캐스트 (1:1 전송) 방식으로 옵저버 하나만을 구독 (subscribe) 할 수 있음
- [코드 실행 기준] : [Observable] : Observable 은 단지 하나의 함수이기 때문에 어떤 상태도 가지지 않으므로 모든 새로운 옵저버에 대해 관찰 가능한 create 코드를 반복해서 실행 (주요 버그와 비효율이 발생)
- [구독자 등록 기준] : [Subject] : 관찰자가 없더라도 코드가 실행되고 데이터가 발행 됨 (구독자의 존재 여부 관계없이 데이터 발행)
- [구독자 수 기준] : [Subject] : 멀티캐스트 (1:N 전송) 방식으로 여러개 옵저버를 구독 (subscribe) 할 수 있음
- [코드 실행 기준] : [Subject] : Subject 는 관찰자 세부 정보를 저장하고 코드를 한 번만 실행해 모든 관찰자에게 결과를 제공함
[4] : Observable 기본 개념
- Observable (생성자 / 관찰할 수 있는 객체) : Observable 이 데이터를 발행 하고 알림 (Event) 을 보내면 Observer 옵저버 는 Observable 생성자 를 구독 (Subscribe) 해 데이터를 소비 (Consume) 한다
- Observable 의 데이터 발행 :
- onNext() : 데이터의 발행을 알림
- onError() : 오류가 발생했음을 알림 (이후에 onNext와 onComplete가 발생하지 않음)
- onComplete() : 모든 데이터의 발행이 완료되었음을 알림 (딱 한 번만 발생하며 이후에 onNext가 발생하면 안됨)
- Observable 의 Subscribe :
- 구독 (Subscribe) 이란 수신 받은 데이터를 가지고 할 행동을 정의하는 것 입니다
- onComplete() 이벤트가 발생하면 Observable 이 더 이상 데이터를 발행하지 않도록 구독을 해지합니다
- Observable 의 종류 :
- Observable : 가장 기본적인 형태, 0개~N개의 데이터 발행 (BackPressure 없음)
- Single : 단 1개의 데이터, 혹은 오류 발행
- Completable : 성공 혹은 실패 결과만 발행
- Maybe : 0개 또는 1개 완료
- Flowable : 0개~N개의 데이터 발행 (BackPressure 존재)
- Observable 의 생성 종류 (자주 사용 기준) :
- just() : 가장 간단한 생성 방식으로 함수에 인자로 넣은 데이터를 그대로 차례대로 발행 (인자로 10개 까지 전달), 자동으로 onNext, onComplete 혹은 onError가 호출 됨
- create() : 프로그래머가 직접 onNext, onComplete, onError를 호출해야함 (just 와의 차이점)
- from() : 여러 형태의 데이터를 다루어야 하는 경우 사용
[5] : Subject 기본 개념
- Subject 는 생성자와 관찰자 특징을 모두 가지고 있는 클래스 입니다
- Subject 는 멀티캐스트 (1:N 전송) 방식으로 여러개 옵저버를 구독 (subscribe) 할 수 있습니다
- Subject 클래스 종류 :
- PublishSubject : 구독 (subscribe) 한 시점으로부터 Observable 주체에서 발생 되는 이벤트 (onNext, onError, onCompleted) 를 전달 받음
- BehaviorSubject : 구독 (subscribe) 이전 발생된 이벤트가 1개 라도 있으면 구독 시점에 해당 이벤트 (1개) 를 전달 받음
- ReplaySubject : 구독 (subscribe) 하는 시점에 관계없이 Observable 주체에서 방출된 모든 항목을 전달 받음
- AsyncSubject : Observable 주체에서 방출된 마지막 값을 전달 받음 (onComplete 완료 기준으로 onNext 마지막 값)
[6] : Scheduler (스케줄러) 기본 개념
- Scheduler 는 반응형 프로그래밍에서 동시성을 관리하며, 스레드 관리를 제어하기 위한 subscribeOn , observeOn 메소드 가 있습니다
- Scheduler 관련 용어 설명 :
- AndroidSchedulers.mainThread() : 안드로이드의 UI 스레드에서 동작
- Schedulers.io() : 비동기 처리를 위해 사용하는 스케줄러 (API 호출 등 네트워크를 사용한 호출)
- Schedulers.computation() : 이벤트 그룹에서 간단한 연산이나 콜백 처리를 위해 사용 (스레드 풀이 순환하면서 실행됨)
- Schedulers.from(executor) : 특정 executor를 스케줄러로 사용
- Schedulers.newThread() : 새로운 스레드를 만드는 스케줄러
- Schedulers.trampoline() : 큐에 있는 일이 끝나면 이어서 현재 스레드에서 수행
- HandlerScheduler.from(handler) : 특정 핸들러 handler 에 의존하여 동작
- 예시 : subscribeOn(Schedulers.io()) // Observable (생성자) 을 IO 스레드에서 실행
- 예시 : observeOn(AndroidSchedulers.mainThread()) // Observer (관찰자) 메인 스레드에서 실행
반응형
'투케이2K 학습정리' 카테고리의 다른 글
Comments