일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- compose
- 디자인패턴
- 테스트의 장점
- 유닛테스트
- 깃
- rxjava
- mock
- Observable
- 컴포즈
- 제한함수
- git
- Kotlin
- 자료구조
- UnitTest
- 공격적 프로그래밍
- MVVM
- 안드로이드 디자인패턴
- 파이썬
- dagger2
- Room
- 코틀린
- 단위테스트
- Android
- 안드로이드
- 안정성
- Jetpack
- Di
- 코딩테스트
- Python
- ViewModel
- Today
- Total
세상을 바꾸는 개발자
[RxJava] 명령형 프로그래밍과 반응형 프로그래밍의 차이 본문
안녕하세요 헬창코딩입니다.!!
요즘도 그렇고 예전부터 개발을 하면서 반응형 프로그램을 많이 써오고 있는데요 반응형 프로그램이 무엇이기에 이렇게 많이 사용할까요?
그래서 오늘은 반응형 프로그래밍이 무엇인지 알아보도록 할게요~
반응형 프로그래밍은 (Reactive Programming) 주변 환경과 끊임없이 상호작용을 하는 프로그래밍을 의미합니다.!
프로그램이 주도하는 것이 아니라 환경(예를 들어 데이터)이 변하면 이벤트를 받아 동작하도록 만드는 프로그래밍 기법을 말합니다.
반응형 프로그램은 외부 요구에 끊임없이 반응하고 처리를 합니다.
여기서 반응형 프로그래밍의 편리함과 사용성은 명령형 프로그래밍과의 차이를 통해서 알 수 있는데요
먼저 그럼 명령형 프로그래밍은 무엇일까요?
명령형 프로그래밍이란 것은 개발자에 의해서 작성된 코드가 정해진 순서대로 실행되는 방식의 프로그래밍을 의미합니다.
코드가 순서대로 실행되므로 개념적으로 친밀하고, 직접적으로 구체화하여 이해하기가 쉽습니다.
코드가 순서대로 실행된다는 의미는 개발자가 작성한 조건문, 반복문 또는 함수 호출 등에 의 해 컴파일러가 다른 코드로 이동하는 것을 뜻합니다. 디버거가 코드의 명령문을 명확하게 가리킬 수 있고 다음 코드라인이 무엇인지 명확하게 알 수 있습니다.
예제 코드를 통해서 이해해보도록 하겠습니다!!
위 코드를 보시면 규칙이 정해져 있죠
1. 리스트를 만들고
2. 리스트에 1부터 9까지 아이템을 순차적으로 추가한다.
3. helchang이라는 리스트를 돌면서 짝수를 출력한다
4. 리스트에 6~9까지 값을 추가한다.
위 코드를 보시면 출력 명령 이후에 리스트에 아이템을 추가해도 콘솔에는 영향을 끼치지 않습니다.
하지만 반응형으로 한번 만들어볼까요?
보시면 아시겠지만 리스트의 구독 시점부터 값이 출력되는 것을 확인할 수 있습니다. 정리를 하면
1. 데이터 스트림을 만든다.(PublishSubject)
2. 데이터 스트림에 1부터 4까지 순차적으로 추가한다.
3. 데이터 스트림에서 짝수만 출력하는 데이터 스트림으로 변형한 뒤 구독한다.
4. 데이터 스트림에 5부터 8까지 순차적으로 추가한다.
여기서 PublishSubject는 구독 시점 이후의 데이터만 옵서버에 전달하다는 특징이 있어서 6과 8만 출력이 되었지만
구독 시점 이전의 데이터도 출력을 하려면 ReplaySubject로 만들면 됩니다.!!!
결론으로 반응형 프로그래밍을 사용하는 이유는 개발자가 처하는 동시성 문제, 다중 이벤트 처리, 백그라운드 스레드 처리 등을 다루면서 많은 문제점을 만나게 되는데 이때 RxJava라는 반응형 프로그래밍을 사용한다면 이를 확실하게 해결할 수 있기 때문인 것 같습니다.
'안드로이드 > RxJava' 카테고리의 다른 글
[RxJava] 다양한 Observable의 형태 ( Maybe ) (0) | 2021.08.24 |
---|---|
[RxJava] 다양한 Observable의 형태 ( Single ) (0) | 2021.08.24 |
[RxJava] Observable로 변환하기(fromArray, fromIterable, fromFuture, fromPublisher, fromCallable) (0) | 2021.08.23 |
[RxJava] just() 연산자 (0) | 2021.08.23 |
[RxJava] Observerble 이란? (0) | 2021.08.18 |