ReactiveX

Updated:

📌 아래의 코드 내용은 JavaScript 예시로 작성되었습니다


🔷 함수형 프로그래밍 개념

Functional Programing : 코딩 중 오류의 소지가 될 수 있는 변수(Variables) 사용을 지양하고 순수함수 (pure functions) 을 사용해서 프로그래밍을 하는것임

예시 코드 Array 에서 짝수만 선택하고, 첫 5개만 선택한 후, 제곱을 해서 한 문자열로 합치는 과정을 나타내기

🔶 일반적인 변수 사용 예시

const numbers = [
  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
];

// 프로그래밍 실핼 중 값이 바뀔 수 있는 변수들을 사용
// 코드가 복잡해지고 app 이 커지게 되면 이러한 변수들은 위험 요소가 됨
// 이 변수들은 상태값 state 로 돌아가게 된는데
// 특히 여러 작업을 동시에 돌리는 멀티 스레딩 환경에서는 둘 이상의 스레드가 한 변수에 접근 할때
let count = 0;
let result = "";

for (let i = 0; i < numbers.length - 1 && count < 5; i++) {
  if (numbers[i] % 2 === 0) {
    result += (result === "" ? "" : ", ") + Math.pow(numbers[i], 2);
    count++;
  }
}

console.log(result); //  4, 16, 36, 64, 100

🔶 함수형 프로그래밍 사용 예시

// 함수형으로 짠 코드
const numbers2 = [
  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
];

// 순수 함수들, 즉 외부의 데이터를 변경하지 않고
// 받아온 값들을 내부에서 처리해서 밖으로 반환하는
console.log(
  numbers2
    .filter((n) => n % 2 === 0)
    .slice(0, 5)
    .map((n) => Math.pow(n, 2))
    .join(", ")
); // 4, 16, 36, 64, 100

함수형 프로그래밍에서도 변수는 사용될 수 있지만 그게 직접 개발자가 작성하는 코드로 노출되지 않기 때문에 프로그래머의 착오로 인한 오류들은 방지되고 스레드들의 동시 접근에 의한 오류 또는 교착 문제들로 부터도 자유로운 프로그래밍을 할 수 있게 됩니다

일반적으로 변수 사용 프로그래밍은 동사들을 사용하는 명령조의 느낌으로 짜인다면, 함수형 프로그래밍은 이거는 이것들을 거친 이거다 라는 식으로 어떠한 과정을 선언하는 형태를 나타내고 있습니다.

그래서 함수형 프로그래밍은 일반적으로 선언형 프로그래밍의 특성도 가지고 있습니다. 또한 각 언어나 라이브러리들마다 주어진 다양한 순수함수, 고차함수 등 을 필요한 곳에 가져다가 쓰는 코딩 방식으로 이루워져있습니다. 그렇기 때문에 다양한 함수들의 기능과 활용법이 중요합니다

🔷 ReactiveX 개념

ReactiveX 는 기본적으로 함수형 프로그래밍의 기본 골격을 갖추고 있습니다

그리고, ReactiveX 는 크게 세 요소로 구성됩니다

🔶 Observable

일련의 값을 발행하는 것으로 관찰될 수 있는 것, 관찰 되는 대상이라는 뜻임. range(1, 20) 과같이 연속적으로 발행되어 나오는 값들을 stream 을 타고 흐르는 배관 pipe 를 거칩니다

🔶 Operator

Stream 을 타고 파이트라인에서의 실행하는 단계를 연산자 operator 단계입니다. 즉, Operator 는 각 언어의 순수 함수들을 가리킵니다. 각 값들 중에 특정 조건을 만족시키는 것들만 골라내는

🔶 Observer

관찰자로서 파이프라인을 바라보면서 값을 기다리다가 무언가 값이 나오면 최종 작업을 실행합니다 예를들어 console.log 로 찍어서 나온 값을 표현해주는거 이것이 Observer 의 역활입니다. 여기서 ReactiveX 에서는 Subscribe 한다고 표현합니다

🔶 왜? ReactiveX 를 사용하는 이유

기본적으로 프로그래밍언어는 가체 내에서 순수함수들을 지원하기 때문에 따로 ReactiveX 를 사용하지 않고도 함수형 프로그래밍 처럼 사용할 수 있습니다.

Observable 이 발행하는 연속된 값들의 흐름을 Stream 이라고 하는데, ReactiveX 가 좋은것은 1차원적인 값들 뿐만 아니라, 시간의 흐름, 사용자의 동작, 네트워크 요청의 결과 까지 전부 스트림, 흐름으로 만들어서 파이프라인에 흘려 보내 처리한다는 개념입니다.

시간의 흐름속에 생겨나는 이러한 값들을 마치 배열을 다루듯이 처리 할 수 있습니다. 때문에 ReactiveX 에서는 순수함수 형태의 다양한 오퍼레이터들이 있습니다. 그래서 각종 비동기 작업, 에니메이션 작업에 ReactiveX 가 유용하게 사용됩니다


Reference

반응형 프로그래밍이 뭔가요? (+ ReactiveX 강좌) - https://www.youtube.com/watch?v=KDiE5qQ3bZI&t=897s

Categories:

Updated:

Leave a comment