Skip to content

커버

이 책에 대하여

이 책은 일반적인 함수형 프로그래밍(Functional Programming, FP) 패러다임에 관한 내용을 다룹니다. 우리는 세계에서 가장 인기 있는 함수형 프로그래밍 언어인 JavaScript를 사용할 것입니다. 현재 프로그래밍 문화가 명령형(Imperative)에 치중된 상황을 감안하면 이 선택이 적합하지 않아 보일 수 있습니다. 그러나 저자는 다음과 같은 이유로 JavaScript가 FP 학습에 최적의 도구라고 판단했습니다:

  • 직장에서 매일 사용할 가능성이 높기 때문입니다.

이는 밤늦게나 주말에 난해한 FP 언어로 사이드 프로젝트를 하는 대신, 실제 업무 프로그램에서 습득한 지식을 매일 연습하고 적용할 수 있음을 의미합니다.

  • 프로그램 작성에 앞서 모든 지식을 습득할 필요가 없기 때문입니다.

순수 함수형 언어에서는 모나드(Monad)를 사용하지 않고는 변수 로깅이나 DOM 노드 읽기가 불가능합니다. 이 과정에서 코드베이스를 순수화하는 동시에 일시적으로 유연한 접근을 선택할 수 있습니다. 또한 JavaScript는 혼합 패러다임 언어이므로 지식이 부족할 때는 기존 방식을 활용할 수 있어 시작하기 더 쉽습니다.

  • 이 언어는 최상급 함수형 코드 작성이 가능하기 때문입니다.

소규모 라이브러리 한두 개만 있으면 Scala나 Haskell 같은 언어를 모방하는 데 필요한 모든 기능을 구현할 수 있습니다. 객체 지향 프로그래밍은 현재 업계를 지배하고 있지만 JavaScript에서는 분명히 어색한 측면이 있습니다. 이는 고속도로 옆에서 텐트 치기나 어색한 행위를 하는 것과 같습니다. 우리는 this의 갑작스러운 변화를 방지하려면 여기저기서 bind를 사용해야 하며, new 키워드를 잊었을 때 해결해야 하는 다양한 문제가 존재합니다. 프라이빗 멤버는 클로저를 통해서만 접근 가능합니다. 많은 개발자에게 FP는 오히려 더 자연스러운 접근 방식입니다.

그러나 타입 기반 함수형 언어는 의심할 여지 없이 이 책에서 소개하는 스타일의 코딩에 가장 적합할 것입니다. JavaScript는 패러다임 학습을 위한 수단이며, 실제 적용 여부는 여러분의 선택에 달려 있습니다. 다행히 인터페이스들은 수학적 원리에 기반하므로 어디서나 통용됩니다. Swiftz, Scalaz, Haskell, PureScript 등의 수학적 환경에서도 편안하게 작업할 수 있을 것입니다.

온라인 읽기

최적의 독서 경험을 위해 Gitbook을 통한 온라인 버전을 이용하세요.

  • 빠른 접근 사이드바
  • 브라우저 내 실습
  • 심층 예제

코드 실습하기

효율적인 학습을 위해 설명을 듣는 동안 지루해지지 않도록, 이 책에서 소개하는 개념들을 직접 실습해 보는 것이 중요합니다. 일부 개념은 처음에 파악하기 까다로울 수 있으므로 손으로 직접 경험하는 것이 최선의 이해 방법입니다. 책에 등장하는 모든 함수와 대수적 자료 구조는 부록에 정리되어 있습니다. 해당 코드는 npm 모듈로도 제공됩니다:

bash
$ npm i @mostly-adequate/support

또한 각 장의 실습 파일은 편집기에서 직접 실행 가능합니다. 예를 들어 exercises/ch04 디렉터리의 exercise_*.js 파일을 완성한 후 다음 명령어를 실행하세요:

bash
$ npm run ch04

다운로드

사전 생성된 PDFEPUB 파일은 최신 릴리스의 빌드 아티팩트에서 확인할 수 있습니다.

직접 빌드하기

⚠️ 현재 이 프로젝트 설정은 다소 오래되어 로컬 빌드 시 다양한 문제가 발생할 수 있습니다. 가능하면 node v10.22.1과 최신 버전의 Calibre 사용을 권장합니다.

Nodejs 버전 관련

권장 node 버전(v10.22.1)이 다소 오래된 관계로, 시스템에 설치되어 있지 않을 가능성이 높습니다. nvm을 사용하면 시스템에 여러 nodejs 버전을 동시에 설치할 수 있습니다. 해당 프로젝트 설명에 따라 설치한 후 다음 작업이 가능합니다:

  • 필요한 node 버전 설치:
nvm install 10.22.1
nvm install 20.2.0
  • node 버전 전환 방법:
nvm use 10.22.1
node -v // will show v10.22.1 
nvm use 20.2.0
node -v // will show v20.2.0

이 프로젝트는 .nvmrc 파일을 포함하고 있으므로 node 버전 명시 없이 nvm installnvm use 명령을 사용할 수 있습니다:

// being anywhere inside this project
nvm install
node -v // will show v10.22.1

전체 명령어 시퀀스

시스템에 nvm이 설치되었다고 가정할 때, PDF와 EPUB 파일을 직접 생성하기 위한 전체 명령어 시퀀스는 다음과 같습니다:

git clone https://github.com/MostlyAdequate/mostly-adequate-guide.git
cd mostly-adequate-guide/
nvm install
npm install
npm run setup
npm run generate-pdf
npm run generate-epub

주의! 전자책 버전 생성에는 ebook-convert 설치가 필요합니다. 설치 가이드.

목차

SUMMARY.md 참조

기여하기

CONTRIBUTING.md 참조

번역본

TRANSLATIONS.md 참조

FAQ

FAQ.md 참조

향후 계획

  • 1부(1-7장)는 기초 가이드입니다. 초안인 만큼 오류 발견 시 업데이트 중이며 도움을 환영합니다!
  • 2부(8-13장)는 펑터(Functor)와 모나드(Monad)에서 트래버서블(Traversable)까지 타입 클래스를 다룹니다. 트랜스포머와 순수 애플리케이션 설명도 추가할 예정입니다.
  • 3부(14장 이후)는 실용적 프로그래밍과 학문적 추상성의 경계를 넘나듭니다. 코모나드(Comonad), F-알지브라(F-Algebra), 프리 모나드(Free Monad), 요네다(Yoneda) 등의 범주론적 구조를 살펴볼 예정입니다.

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.