더북(TheBook)

이 예제에서 42라는 답을 간단히 도출할 수 있습니다. a를 변경했다는 사실은 c 값에 영향을 미치지 않았습니다. 즉, 변화의 전파(propagation of change)가 일어나지 않았습니다. 이는 RP에서 이해해야 할 가장 중요한 개념입니다. 이제 이 개념을 자바스크립트 의사 코드로 구현해 보겠습니다.

A$ = [20]; -- 스트림을 20으로 초기화합니다.
B$ = [22]; -- 스트림을 22로 초기화합니다.
C$ = A$.concat(B$).reduce(adder); //-> [42] -- 42를 담은 새 컨테이너를 얻기 위해 두 스트림을 연결하고 가산 함수를 적용합니다.
A$.push(100); -- 새 값을 A$에 주입합니다.
C$ = ?

먼저 여기에서 사용하는 표기법을 살펴보겠습니다. 스트림은 배열과 매우 유사한 데이터의 컨테이너 또는 래퍼입니다. 따라서 배열의 리터럴 표기법인 []로 이를 나타냅니다. 또한, 스트림을 가리키는 변수를 한정하는 데는 접미사 $를 사용하는 것이 일반적입니다. 이 표기법은 RxJS 커뮤니티의 주요 공헌자이자 핀란드 사람인 안드레 스탈츠(Andre Staltz)가 만들었다고 하여 핀란드 표기법(Finnish Notation)이라고 합니다.

예제에서는 각각 한 개의 정숫값으로 된 A$B$라는 두 스트림을 만들었습니다. 이들은 자바스크립트에서 기본 객체도 아니고 오버로드된 더하기(+) 연산자도 가지고 있지 않으므로 두 스트림을 연결하고 가산 함수인 reduce 같은 연산자 메서드(operator method)를 적용하여 더하기를 나타내야 합니다(배열 메서드들을 사용해 봤다면 친숙할 겁니다). 이는 다시 C$로 표현했습니다.

Note 추가적인 배열 메서드

자바스크립트 ES5에서는 함수형 프로그래밍을 어느 정도 자체 지원할 수 있는 추가적인 배열 메서드(array extras)라는 새로운 배열 메서드가 도입되었습니다. 이 배열 메서드에는 map, reduce, filter, some, every 등이 포함됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.