리액티브 프로그래밍

lee jae hwan·2022년 8월 29일
0

RxJS

목록 보기
1/21

리액티브 프로그래밍은 “데이터 스트림” 과 “변화 전파”의 연관된 선언적 프로그래밍 패러다임이다.



데이터스트림이란?

데이터스트림은 지속적으로 관찰할 수 있는 흐름을 가진 데이터라고 할 수 있다.


데이터스트림에 비동기개념이 더해지면 시간이라는 기준이 더해진다.

동기식 데이터스트림은 일련의 연속적인 데이터흐름 즉 배열과 같이 시간간격 변화없이 즉 일정한 시간간격으로 데이터흐름이 발생됨을 의미한다.

비동기식 데이터스트림은 일정치 않은 시간간격으로 데이터흐름이 발생됨을 의미한다.

데이터스트림에는 이벤트, API 응답결과 등 비동기식 데이터가 들어올 수 있고, 숫자나 문자열등의 동기식 데이터도 들어올 수 있다.


비동기식 데이터스트림의 관점에서 보면 동기식 데이터스트림은 비동기식 데이터스트림의 하나일 뿐이다.

따라서 비동기식 데이터스트림으로 모든 데이터흐름을 관리하면 된다는 결론이 얻어진다.




변화전파란 무엇인가?

관심대상인 객체가 있고 그 객체상태를 지속적으로 관찰하고 변화된 상태정보를 받기 원하는 객체들이 있을때 어떠한 방식으로 객체 상태변화를 전파하는 것이 좋을까?


car1은 tireA 내부 메소드나 상태정보를 지속적으로 알아야할 필요가있다.

다르게 표현하면 car1은 tireA에 의존성이 있는 것이다.


tireA는 X라는 메소드를 가지고있고 car1은 X메소드를 사용하고 있는 중에 X메소드 name이 Z로 변경되어야 한다면 car1에서 X를 호출하는 부분들을 모두 찾아 Z로 변경해야만 한다.

더군다나 tireA를 car2, car3... 여러객체가 사용하고 있다면 유지보수에 많은 시간과 노력이 발생할 것이다.

이러한 단점은 car1이 tireA에 높은 의존성으로 연결되어 있기 때문에 발생한다.



observer pattern을 이용해 객체간 의존성을 느슨하게 하면 어떻게 되는지 알아보자.

tireA는 자신에게 의존하고 있는 객체리스트를 가지고 있다.

tireA의 메소드name이 변경되었을때 update메소드를 사용하여 의존객체들의 메소드에 접근하여 상태변화를 알려준다.

이제 car1은 tireA의 상태정보를 알기위해 자신이 어떤 행동을 할 필요가 없어진다.

이러한 방식은 car1은 tireA에 느슨한 의존성으로 연결된다.


car1은 tireA에 변화전파 구독할뿐이다.



  1. 옵저버블 객체를 만든다

    • 데이터스트림소스를 객체생성시 전달한다.
  2. 옵저버블객체에 구독한다.

    • 데이터방출시 호출될 핸들러를 전달한다.

0개의 댓글