Chapter 19

함수형 프로그래밍 여행에 앞서

  • 19.1 지금까지 배운 것
  • 19.2 함수형 프로그래밍 마스터 되기
  • 19.3 함수형 프로그래밍 언어들
  • 19.4 수학적 기초와 더 깊은 세계
  • 19.5 여행을 계속하자

함수형 프로그래밍은 목적지가 아니라 여행이야 — 매일 코드를 작성하면서 조금씩 더 나은 선택을 하는 과정이지.

19장은 에필로그야. 이 책에서 다룬 내용을 두 파트로 정리하면, **파트 1 — 액션, 계산, 데이터(19장)**에서는 코드를 액션/계산/데이터로 분류하기, 액션에서 계산을 빼내기, 카피-온-라이트로 불변성 구현, 방어적 복사로 레거시와 안전하게 연동, 계층형 설계로 함수들을 조직하기를 배웠고, **파트 2 — 일급 추상(1018장)**에서는 암묵적 인자를 명시적으로 드러내기, 고차 함수로 코드 중복 제거, map/filter/reduce로 함수형 반복, 함수형 도구 체이닝, 중첩된 데이터를 함수형으로 다루기(update, nestedUpdate), 타임라인 다이어그램으로 동시성 분석, 큐와 Cut으로 타임라인 관리, 반응형 아키텍처와 어니언 아키텍처를 배웠어. 핵심 메시지 하나로 줄이면 — 부수효과를 제거하는 게 아니라, 부수효과를 바깥으로 밀어내고 안쪽은 순수하게 유지하라.

저자가 제안하는 마스터로 가는 길은 연습이야. 기존 코드에서 액션/계산/데이터를 분류해보고, 액션에서 계산을 빼내는 리팩터링을 반복하고, map/filter/reduce로 for 루프를 바꿔보고, 팀원에게 이 개념을 설명해봐. 설명할 수 있으면 이해한 거거든. 함수형 프로그래밍은 점진적으로 적용할 수 있다는 게 큰 장점이야. 기존 코드를 전부 버리고 새로 짤 필요가 없어. 새 함수를 작성할 때 계산으로 만들고, 기존 함수를 수정할 때 액션에서 계산을 빼내고, 조금씩 하면 돼.

이 책은 자바스크립트로 설명했지만, 함수형 프로그래밍을 더 깊이 탐구하려면 함수형 언어를 배워보는 것도 좋아. Clojure는 저자가 실제로 사용하는 언어로, JVM 위에서 돌아가는 리스프 방언이고 불변 데이터 구조가 기본이야. 이 책의 많은 아이디어가 Clojure에서 왔지. Haskell은 순수 함수형 언어의 대표로 타입 시스템이 매우 강력하고 부수효과를 타입으로 추적해(IO 모나드). Erlang/Elixir은 동시성에 강한 함수형 언어, Elm은 프론트엔드용 순수 함수형 언어로 어니언 아키텍처가 언어 수준에서 강제되고, Scala는 객체지향과 함수형을 섞은 언어야. 어떤 언어를 배우든 핵심은 **"계산과 액션의 분리"**라는 아이디어야.

모나드, 펑터, 카테고리 이론, 타입 이론 같은 수학적 개념들도 있지만, 저자는 이렇게 말해 — 실용적인 함수형 프로그래밍에 이런 수학은 필수가 아니다. 이 책에서 배운 것만으로도 충분히 좋은 코드를 작성할 수 있어. 수학은 관심이 생기면 그때 파도 돼.

이 책에서 가져갈 가장 중요한 습관 세 가지는, 코드를 볼 때 "이게 액션인가, 계산인가, 데이터인가?"를 물어보는 습관, 액션에서 계산을 빼내려는 습관, 데이터를 불변으로 다루려는 습관이야. 이 세 가지만 실천해도 코드 품질이 눈에 띄게 달라져. 그리고 한번 이 렌즈로 코드를 보기 시작하면, 다시 이전으로 돌아가기 어려워 — 좋은 의미로.


정리

19장 읽고 기억할 거 한 가지:

함수형 프로그래밍의 핵심은 액션/계산/데이터 분류, 그리고 액션에서 계산을 빼내기. 이 두 가지를 일상적으로 실천하는 것이 마스터로 가는 길이다. 특별한 언어나 수학적 지식은 필수가 아니다 — 지금 쓰는 언어에서, 지금 작성하는 코드에서 시작하면 된다.