Books

앵버박사 2016. 10. 3. 17:40




서문

최근에 머신러닝, 함수형, 폴리글랏이니 동시성이니 공짜점심은 끝났다는 둥 여러가지 이야기가 들려온다. 개별적인 최신 기술 트렌드지만 큰 흐름에서 본다면 결국 하나의 큰 나무로 이어지는 가지들이라는 생각이 든다. 이런 상황에서 자주 들리는 함수형이라는 이야기에 호기심이 생겼고, 간간히 찾아본 인터넷 자료들로 대략적인 개념은 알았지만, 깊이 들어가보면 상당히 어려워 보였다. 기존과는 다른 새로운 패러다임이기에 그랬고, 특히 어렵게만 느껴지는 수학이라는 소양이 한 구석에서 함수형을 받쳐주고 있는 듯 했기에 더욱 그랬다. 앞으로 수학을 포함한 위에서 나열했던 기술들에 대해 공부를 하고 내 목표로 가는 기술 셋을 완성할 계획이다. 그런 의미에서 함수형 사고라는 책은 긴 대장정의 준비과정 중 하나라 할 수 있다. 이런 기술들이 지금 당장 내가 하고 있는 일과는 관계가 없을 수 있다. 하지만 기술의 흐름을 보건데, 멀지 않은 시기에 또 허겁지겁 뒤쳐져 따라가는 우리의 모습을 볼 수 있을 것 이다. 사실 세계를 무대로 본다면 늦은감이 없지 않아 있지만 지금 시작한다면 너무 늦지는 않은거라고 스스로 위로를 하며 리뷰를 시작해본다.


구성

거의 현재 나와있는 함수형 도서들은 특정 언어를 통해 함수형이라는 패러다임을 가르쳐 준다. 하지만 함수형 사고는 객체지향적 사고를 해온 우리들이 어떻게 함수형이라는 새로운 패러다임에 적응할 수 있을지에 초점을 맞췄다. 따라서 언어 종속적이지 않고, JVM 기반의 자바, 스칼라, 그루비, 클로저 등등 여러 언어를 활용하여 설명한다. 사람에 따라 많은 언어의 등장을 달갑지 않게 생각하기도 하지만, 본인은 폴리글랏의 시대에 발 맞춰 여러 언어의 함수형적 특징을 알 수 있어 좋았다(나는 스칼라, 그루비, 클로저를 잘 모른다). 문법이 익숙해 지는 것은 덤이다. 이 책은 어떤 예제를 명령형으로 처리한 것과 함수형으로 처리한 것을 비교하여 함수형 프로그래밍을 위해 어떻게 사고방식이 달라져야 하는지 보여준다. 또한 예제를 통해 함수형의 핵심 개념인 고계함수, 필터, 맵, 폴드/리듀스, 클로저, 커링, 부분적용, 재귀, 스트림, 메모이제이션, 게으름 등을 배울 수 있다. 그 이후 함수형에서의 디자인패턴에 대한 이야기를 하기도 하고, 자바8에 녹아있는 함수형 기능과 조금 더 큰 범위인 아키텍처, 웹 프레임워크, 데이터베이스 레벨에서 함수형이 끼치는 영향, 마지막으로 폴리글랏과 폴리패러다임에 대한 이야기로 마무리 된다. 마지막 부분의 타이핑 기반 프로그래밍 언어의 분류(약/강, 정적/동적)에 대한 이야기도 재미있었다.


난이도

조금 어렵다. 우선 간단한 예제들 이지만 4가지 이상의 언어를 사용하기 때문에도 그렇고(특히 나는 클로저가 어려웠다), 간혹있는 개념적 설명(어떤 부분에서 객체지향과 함수형의 차이점 등)들은 코드나 자세한 설명이 없을 때도 있어 무슨 말인지 이해하지 못할 때가 있었다. 객체지향을 어느정도 이해하고, 함수형 프로그래밍의 개념에 대해 간략하게 공부하고 난 이후 보면 좋을 것 같다. 입문서로는 조금 난해하다.


결론

책을 다 읽은 후 함수형에서 사용되는 개념들에 대해 이해하게 됐지만, 정작 함수형 프로그래밍이 무엇인가 라는 질문에 명확히 대답하기 어려웠다. 훌륭한 책이지만 그것이 별점에 조금 영향을 미쳤다.


별점 ★★☆