[책] 함수형 사고


요즘 함수형 프로그래밍에 관심이 많다. 나뿐만 아니라 함수형 패러다임을 도입하는 것이 프로그래밍계의 트렌드라는 생각이다. 대표적으로 2014년에 도입된 Java 8을 꼽을 수 있겠으며 앞선 글에서도 말했듯 prefer-const도 함수형 패러다임의 일종이다.

그렇다면 함수형 프로그래밍이란 무엇을 뜻하는 걸까? 마이클 페더스는 함수형 프로그래밍에 대해서 이렇게 말했다.

객체지향 프로그래밍은 움직이는 부분을 캡슐화하여 코드 이해를 돕고, 함수형 프로그래밍은 움직이는 부분을 최소화하여 코드 이해를 돕는다.

즉, 변수를 최소화하는 프로그래밍 패러다임이라는 것이다.

함수형 사고

이 책에서는 객체지향 프로그래밍을 함수형으로 어떻게 전환하는지 예제 중심으로 다룬다. 이어서 함수형 프로그래밍의 핵심적인 요소들(람다, 순수함수, 클로저, 게으른 평가 등)에 대해서도 예제와 함께 다뤄 이해하기 수월하다. 하지만 이 책은 함수형 프로그래밍 언어를 중점으로 다루지는 않는다. 그냥 함수형 구현을 하는 것에 초점이 맞춰져 있다. 사용하는 언어도 Scala나 Clojure 같은 언어도 등장하지만 일단은 Java를 중점으로 사용하고 있다. 후반부에는 특정 언어에 한정되는 트릭도 등장하면서 약간 아쉽기도 했지만 큰 문제는 아니었다.

코드는 대부분 Java 위주에, Scala, Clojure1 같은 언어도 사용하기 때문에 기반이 거의 JavaScript인 나에게는 이해하기 어려운 코드도 좀 있었다. 특히나 Clojure로 짠 코드는 문법이 익숙하지 않았던 탓인지 내게는 거의 난해한 프로그래밍 언어 수준. 그러나 대부분의 경우 설명하고자 하는 것에 대해 이해하기 어려울 정도는 아니다. 그래도 Java를 다루어 본 적이 없는 개발자라면 기본적인 문법 정도는 공부를 하고 읽어야 할 것이다.

당연하지만 함수형 언어를 배우기 위해서 이 책을 보는 건 큰 의미가 없다. 그보다는 지금 사용하는 언어 그대로 사용하면서 거기에 함수형 패러다임을 섞어 조금씩 개선해 나가고 싶은 사람이 읽으면 좋을 것이다. 실제로 나도 계속해서 JavaScript라는 하나의 언어를 사용하고 있지만 이 책을 보기 전과 그 뒤의 코드가 많이 달라졌고, 생각하는 방식도 많이 달라졌다. 물론 이는 ES2015를 위시한 JavaScript라는 언어가 함수형 패러다임을 써먹기에도 꽤 잘 되어있기 때문이다.

객체지향과 함수형은 상호배타적이지 않다.2 책 마지막 부분에서도 이를 언급하면서 폴리패러다임(Poly-paradigm)에 대해 소개한다. 함수형과 객체지향적 패러다임을 모두 이해함으로써 필요할 때 적절히 활용할 수 있다는 점이 중요하다고 생각한다.


  1. 1.Clojure의 경우 클로저라고 번역되어 클로저(Closure)랑 헷갈려서 난해한 문장도 좀 있었다.
  2. 2.함수형 프로그래밍 규칙을 엄격하게 적용하면 모든 객체의 Setter를 없애고 내부 상태를 변경하는 것을 금지하기도 한다. 이 점은 객체지향과는 약간 상반된다고 할 수 있겠다.