fxjs

미해결질문
유인동 프로필
유인동 2019.05.26

안녕하세요. 유인동입니다.

우선 인프런 운영팀께 말씀드려 환불 절차를 진행해달라고 요청드렸습니다.

환불 여부와 상관없이 좀 더 상세한 답변을 드리고 싶습니다. 

1. 본 강의는 fxjs를 사용하고 있지만 절대 특정 라이브러리의 사용법 정도를 알려드리는 강좌는 아니라고 자신있게 말씀 드릴 수 있습니다.

본 강의인 '응용편'의 이전 강의 '함수형 프로그래밍과 JavaScript ES6+' 에서 함수형 프로그래밍에 필요하고 이터러블 프로토콜을 따르는 함수형 함수들을 만들면서 강의를 진행했었는데요. 그 코드들과 거의 동일한 코드로 구성되어있는 라이브러리가 fxjs입니다. 어쩌면 강의를 수강하시는 분들과 함께 어떠한 라이브러리에도 의존하지 않고 만들어간 코드라고 볼 수도 있습니다.

2. 왜 바닐라 JS나 유명한 라이브러리를 기반으로 강의하지 않는지에 대해 궁금하실 것 같습니다.

자바스크립트는 현재 Array.prototype 에 몇 개 안되는 함수형 메서드를 가지고 있습니다. map, filter, reduce, find, some, every, flat, flatMap 정도가 되겠습니다. 그런데 이 메서드들은 함수형 프로그래밍, 혹은 Lisp을 가능하도록 하는 정도의 메서드는 아닙니다. 함수형 프로그래밍 혹은 리습이라는 큰 주제의 아주 일부 정도만 흉내낼 수 있는 정도의 메서드 군이라고 볼 수 있습니다.

이유를 설명하자면 조금 길어질 수 있는데요. 기본적으로 함수형 패러다임의 타 언어들을 빗대어 설명하자면 다른 함수형 언어들은 값과 함수 세트에 대한 추상화가 훨씬 더 높은 수준으로 되어있습니다. 특징을 간단히만 나열하자면 배열에만 국한되어있지 않고, 다형성이 높고, 지연성, 동시성을 훌륭하게 지원합니다.

그런데 자바스크립트의 Array.prototype에 있는 메서드들은 지연성을 지원하지 않으며, 동시성을 다룰 수 없습니다. 특히 여기서 말하는 '이터러블에 대한 지연성'이 없다면 메타프로그래밍이 가능한 리습과 같은 프로그래밍을 할 수 없습니다. 좀 더 말하면 명령형 코드로 작성할 수 있는 모든 로직들을 대체할 수 있지가 않게됩니다. 조금 더 구체적인 사례를 들자면 명령형 프로그래밍으로 i++을 통해 언제 끝날지 모르는 일을 처리하다가 break를 통해 빠져나오는 로직을 구성했다면, 이와 같은 로직을 Array.prototype의 메서드로는 이와 같은 로직을 리스트 프로세싱으로 구현할 수가 없습니다. 또한 Array.prototype의 메서드는 크기가 정해진 일에 대해서만 처리가 가능하며 비동기를 다룰 수 없습니다.

자바스크립트는 ES6+이 되면서 처음으로, 언어 자체적인 프로토콜을 이용하여 지연성과 동시성을 다룰 수 있는 상태가 되었습니다. 바닐라 JS를 제외하고 이야기해도, ES5 기반의 많은 라이브러리들인 Underscore.js, lodash, Ramda, RxJS 등 역시 이러한 프로그래밍을 충분히 지원하지는 못하고 있습니다. ES6+에서 처음 언어적으로 가능하게 되었고, 이 라이브러리들은 ES6+ 후에도 아직 직접적으로 해당 프로토콜을 기반으로 재구성되거나 하지는 않았습니다. 이중 RxJS는 상당 부분 이러한 개념들이 담겨있지만 ES6+의 표준 프로토콜을 따르는 방식은 아니며 RxJS 자체가 또 하나의 언어와 같게 사용되는 방식입니다. 본 강의는 보다 ES6+ 언어를 따르는 함수형 프로그래밍을 지향하고 있습니다.

3. 본 강의의 목적은 오히려 순수 ES6+ 바닐라JS를 기반으로 한 함수형 이터러블 프로그래밍을 전달하는 것 입니다.

본 강의는 언어의 자체 프로토콜인 이터러블 프토콜을 기반으로 이터러블/이터레이터/제너레이터, Promise/async/await, try/catch 등을 이용하여 높은 수준의 함수형 프로그래밍, 높은 수준의 Lisp(리스트프로세싱)을 하는 방법을 소개합니다. 아무것도 없는 것에서 부터 출발해서 데이터의 추상과 함수의 추상을 정리하고 메타프로그래밍을 하는 법을 소개합니다.

이런 방식의 프로그래밍은 특정 라이브러리나, 특정 프레임워크 등에 종속되지 않으며, 언어 자체의 사용을 확장하는 개념이기 때문에, 어떤곳에서든 사용될 수 있습니다. 본 강의는 수강생들이 바닐라 ES6+를 기반으로 모든 코드를 따라하면서 함수형 프로그래밍의 가장 기본기에서부터 응용까지를 습득하실 수 있도록 준비되었습니다. 

4. 본 강의의 목적은 특정 라이브러리 소개가 아닌 명령형 프로그래밍을 함수형/이터러블/리습으로 전환하도록 하는 강의입니다.

평소 작성해야하는 명령형 코드들인 if, for, i++, j++, break를 어떻게하면 이터러블 프로그래밍으로 완전히 대체할 수 있는가에 대한 개념과 방법을 다루는 강의입니다. 또한 대표적으로 만나는 실무적인 상황들을 이터러블 프로그래밍으로 다루는 사례를 보여드립니다.

이러한 개념과 방법은 다른 함수형 라이브러리나 다른 언어에서도 모두 사용할 수 있는 개념입니다. 이 개념을 전달하기 위해서 사용되는 하나의 언어, 하나의 라이브러리일 뿐입니다. 모든 언어에 for, if, i++ 이 있듯이, 함수형 프로그래밍 언어나 라이브러리들도 모두 map, filter, reduce, take가 있고, 지연성과 동시성이라는 개념이 있습니다. 함수를 통해 추상화를하며, 다형성이라는 성질을 중요시합니다. 그러한 개념들을 전달하는 강의입니다.

이 개념들은 다른 언어인 클로저, 스칼라를 쓴다던지, JS안에서도 RxJS 등의 스트림류의 라이브러리를 사용한다던지 할 때 모두 사용하실 수 있는 개념들입니다. 

제 답변과 상관 없이 인프런 운영팀에게 말씀 주시면 바로 조치해드릴 수 있도록 말씀드렸습니다.

좋은 하루 되시길 바랍니다.

감사합니다.

지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스