함수
쉽다 쉽다 하지만
결코
쉽지 않음을 보여준다.
책도
어렵다.
"자바 개발자를 위한 함수형 프로그래밍"이란 이름 답게 어떻게 하면 함수형으로 코딩을 할 수 있을까에 대한 이야기를 담고 있다. eBook의 특징을 잘 살려 깔끔한 폰트로 가독성이 좋고, 기본적인 내용과 예제를 담고 있다고 생각하면 좋다.
사실 함수형으로 코딩하는 것은 프로그램의 속도와 성능을 높이는데 매우 많은 도움이 된다. 또한 난잡하게 짜논 프로그램보다 잘 정리된 함수형 프로그램이 유지/보수의 측면에서도 훨씬 유리하다. 이러한 이유 때문에 함수형 프로그래밍을 지향하는 것이 프로그래머에겐 유리하며, 자신의 코딩 실력을 높이는 데 많은 도움이 될 것이다.
하지만 자바 실력이 초급 혹은 초중급이라면 이 책을 나중에 보길 권하고 싶다. C++이나 자바에 대해 어느정도 알고 있지 않다면 책의 내용을 이해하는데 다소 어려움이 따르지 않을까 싶다. 초급자가 읽기에는 다소 내용이 어려울 수 있으며, 함수형 프로그래밍의 개념이 잡혀있지 않다면 따라하기 힘들 수도 있다고 생각한다. (마치 객체지향이나 추상화의 개념이 잡혀있지 않은 상태에서 코드로 어설프게 따라하다 포기하는 경우랄까)
어느 정도 함수형 프로그래밍에 대해서 기본을 알고 있거나 관심이 있는 사람이라면 이 책을 읽어보길 추천하고 싶다. 분명 자신의 코딩 스킬을 높이는데 많은 도움이 될 것이다.
아직 프로그래밍에 익숙하지 않아서 이 책은 어렵게 느껴졌다. 만약 프로그래밍에 익숙하지 않은 독자분이 이 책을 읽으려 든다면 무조건 말린다. C++과 자바를 어느 정도 다룰 수 있는 사람이 레벨업을 위해서 읽어야 할 책인것 같다.
책의 제목처럼 함수형 프로그래밍에 대해 설명하고, 함수형으로 코딩을 하는 것의 장점과 방법에 대해 논하고 있는 책이다. 따라서 자바코드를 이해하지 못한다면 책 읽기는 정말 어려울 것이다.
책의 구성은 함수형 프로그래밍에 대한 개요 + 코딩방법으로 비교적 짧은 페이지 수로 구성되어 있다.(130page정도) 따라서 책을 읽으면서 예제 프로그래밍으로 학습을 하면, 페이지가 적기 때문에 적절한 양으로 구성되었다고 생각한다.
코딩에 있어서 단순히 프로그램을 돌리는 것과, 최적화 시켜 돌리는 것은 많은 차이가 있다. 결과적으로는 같지만, 과정에서는 많은 차이가 난다. 숙련된 프로그래머와 막 코딩을 시작한 사람에게서 볼 수 있는 가장 큰 차이일 것이다. 이러한 차이를 줄이기 위한 방법 중 하나로 함수형 프로그래밍을 익혀야 한다고 필자는 말하고 있다. 즉, 코딩의 레벨업이다. 코딩 실력을 높이려는 사람에게 권하고 싶은 책이다.
또한 처음 듣는 용어가 많이 나왔는데, 이는 맨 뒤 Appendix에 정리되어 있다. 따라서 책을 읽기전 용어를 먼저 보고 시작하는 편이 좋을 것이다. 참고자료 역시 뒤에 나와있는데 이는 링크를 걸어두어 페이지로 이동할 수도 있다. 하지만 몇몇 페이지는 이미 막힌 상태인 페이지도 있었다. 또한 페이지에서 파란 글씨로 된 부분을 클릭하면 바로 관련 참고자료로 넘어가는데, 여기서 원래 있었던 부분으로 return하는 기능이 있으면 어떨까 싶다. 참고자료 보러 왔다가 다시 읽었던 페이지를 찾는 번거로움을 줄일 수 있을 것이라 생각한다.
또한 EBOOK으로 볼수 있는 만큼 챕터를 점프한다던지 원하는 부분으로 한번에 이동하는 기능이 추가되어있으면 더 좋을 것이다. 또한 책갈피 기능이라든지 모르는 용어에 대한 사전기능이 있다면 더 좋았을 것이다.
자바를 알고있는 개발자에게 함수형 프로그래밍의 길을 가르쳐주는 책인 줄 알았다. 다시 말해서, 흔하게 존재하는 ‘C++ 개발자를 위한 자바 프로그래밍’이나 ‘자바 개발자를 위한 파이썬’처럼, 스칼라같은 거라도 알려주는가 보다 싶었다.
아니다, 이 책은 함수형 프로그래밍에 대해서 설명한다. 다만, 그에 자바를 사용할 뿐이다. 따라서, 자바에 도통할 필요는 없다. 그저, 코드를 보고 이해할 수 있는 수준이면 된다. 물론, 잘해서 나쁠건 전혀 없다. 그러나!, 함수형 프로그래밍에 대해 전혀 모른다면, 진도를 뽑기 어려울 것이다. 이는, 자동차 운전을 배우지 않은 사람이 메카니즘을 배우는 것과 비유된다. 그렇다. 이 책은 함수형 프로그래밍의원리에 대해 설명한다. 얼랭을 공부하며, 으레히 넘어갔던 부분에 대해서 ‘아하’하고 머리를 치게 만든다. 양이 많지는 않지만, 가치는 충분하다. 함수형 프로그래밍에 대해 생각할 수 있는 기본 틀을 제공해 준것과 마찬가지므로, 다시 함수형 언어를 공부한다면, 좀 더 깊이있게 이해할 수 있을 것이다.
나는 이미 스칼라(JavaVM에서 동작하는 함수형 언어) 책을 몇 페이지 넘겼다.
제가 처음 함수형 프로그래밍이라는 패러다임에 대해 접한 것이 공교롭게도 자바로도 함수형 프로그래밍이 가능하다는 논조의 해외 아티클에서 였습니다. 그 때 제가 느낀 것은 어렵게 꼬인 신텍스(Syntax)로 인해 오히려 가독성을 떨어뜨리고 잘못된 응용으로 인해 유지보수가 어려운 코드를 양산하는 또 다른 방법이 아닐까 하는 생각이었습니다.
이 책에서 굳이 함수형 프로그래밍이 아니라도 중요한 내용이다 라고 꼽을 만한 것들이 꽤 있었는데 불변 클래스(Immutable class)의 이용, 명확하지 않은 타입을 억지로 클래스로 정의하기 보다 이 책에서 제시하는 일반적인 filter, map, fold와 같은 조합기를 이용하는 것과 객체지향 프로그래밍이라는 틀에 구속되어 쓸데없이 장황해 지는 코드에 주의해야 한다는 점 등이었습니다.
책의 제목에 걸맞게 자바 코드를 통해 함수형 프로그래밍을 하기 위해서는 어떤 점들을 생각해야 하는지에 대해 2장에서 보여주고 있는데 역시 null에 대한 처리와 함수의 형(形)을 지정하는 부분에서 많은 내용을 할애하는 것으로 보입니다.
null에 대한 처리는 객체지향 프로그래밍에서도 상당히 논란이 되고 있는 부분 중에 하나 인데 함수형 프로그래밍으로 구현했을 때는 값의 불변성을 보장하기 위해서 반드시 null이 전달될 수 없기 때문으로 설명되어 있지요. null이 전달된 다는 것은 아직 초기값이 바인딩되지 않았으므로 변경이 가능한다는 의미가 되거나 컴파일이 되지 않을 것이기 때문입니다. 다른 의미이지만 개인적으로도 특별히 회피할 수 없는 경우가 아니라면 null을 사용하지 않도록 주의를 기울이는데 책에 나와있는 방법을 그대로 참고해 보는 것도 좋을 것 같습니다.
이 책은 본질적으로 자바 개발자가 경험해보지 못한 함수형 프로그래밍이라는 것을 이해할 수 있도록 하고 프로그래밍을 하기 위해 필요한 기본적인 내용들을 객체 지향에서 함수형으로 전환했을 때 얻을 수 있는 이득과 부수효과들을 확인할 수 있도록 자바 언어로 예제를 구현해서 이해를 돕는 정도인 것으로 보입니다.
책의 내용은 그렇게 많지 않지만 내포하고 있는 내용들이 너무 많고 넓은 범위에 대해서 맛보기 정도 수준으로만 다루기 때문에 읽고 이해하는 것이 쉽지 않은 것 같습니다. 6장에서는 함수형 프로그래밍을 학습하고 실제 적용할 수 있는 방법들에 대해서 이야기하는데 1~5장 까지의 기본적인 이해도를 확장하는 방법으로 저자가 소개한 도서와 언어 중에 하나를 선택해서 좀더 심도 있게 학습해 볼 수 있는 가이드로 활용하면 좋을 것 같습니다.
책의 내용은 타이틀에 충실하기 때문에 별다른 불만은 없었지만 pdf로 배포된 책이어서 모바일 기기에서 볼 때 뷰어 어플리케이션에 따로 담아서 보게 되는데 페이지 인덱스가 표지부터 1 페이지로 지정되기 때문에 페이지 이동 시에 혼동이 있었습니다. 장을 시작하는 부분에서 부터 1페이지로 지정되는 기존의 종이책과는 다른 페이지 지정 방식을 사용하는 것이 좋지 않을까 하는 생각을 해봅니다.
이 책은 함수형 프로그래밍에 대해 다룬 책입니다.
Dean Wampler가 쓴 Functional Programming for Java Developers의 번역서이지만,
수학을 전공하시고 외국에서 근무하시며 다수의 책을 집필하셨던 임백준님이 번역하신 책이라 문장읽기가 수월합니다.(내용의 난이도와는 별개입니다.)
분량도 100페이지 가량으로 가볍게 읽기 좋습니다.
프로그래밍언어는 초기부터 다양한 시각(또는 이론)들을 적용해왔습니다.
예를 들면 함수를 정의하고 적용하는것은 람다 계산법(Lambda Calculus)이라는 수학적 이론을 반영한 것이고,
실세계를 객체로 바라보는 패러다임이 생기면서 객체지향 프로그래밍 언어들이 생겨나 현재까지 발전해 오고 있습니다.(자바 , C++ )
최근에는 계산을 수학적 함수의 조합으로 생각하는 조합논리와 부수효과(sideeffect) 없는 함수실행등을 특징으로 하는 함수형언어의 패러다임이 생가나고 있습니다.(리스프(Lisp), 오캐멀(OCaml), ML, 해스켈(Haskell), 클로저(Clojure) 스칼라(Scalar) )
함수형언어을 배워야 하는 이유
- 과거와 달리 페이스북이나 구글처럼 수많은 사람들에게 서비스를 제공하기 위한 동시성을 위한 수평적 확장이 필요하다.
==> 함수형언어는 동시성에 대한 명확한 원리를 제공해주고, 쉽게 해준다.
- 과거와 달리 엄청난 데이타가 쌓이고 이를 다룰때 중간에 객체관계매핑을 거치는 것은 오버헤드다.
==>함수형언어는 SQL같은것을 통해 받은 데이타 컬렉션에서 바로 작업가능
- 그 외 모듈화 단순성 등등의 장점이 있습니다.
하지만 패러다임의 차이가 있기 때문에 같은 패러다임의 어떤 언어에서 다른언어를 공부할 때처럼 단순히 문법만 익혀서 익히기엔 무리가 있습니다. 순차적 루프를 재귀적 호출로 바꾼다든지 명령형 프로그래밍을 선언적 프로그래밍으로 바꾸어 가야 하는 등 생각하는 구조자체를 함수형언어의 특성을 갖도록 바꾸어주어야 합니다.
이 책은 함수형언어의 기본원리들을 기초부터 하나씩 우리에게 익숙한 자바언어를 통해서 구현해 나가고, 점진적으로 이렇게 만든 구현들을 이용하여 함수형언어의 특성을 살린 여러 예제들을 작성해보는 형태로 되어있다.
이런 함수형언어의 기본원리들은 데이타구조나 알고리즘에도 영향을 끼치므로, 이에 적합한 리스트, 맵, 조합기 등을 코드로 구현 설명해주고 있습니다.
더 자세히 알고 싶은 사람들에게 잘 정리된 용어정리와 많은 참고자료의 링크는 큰 도움이 될 거 같습니다.
함수적 동시성에 대해서도 한 챕터가 할애되어 있고, 이 책이 함수형언어에 대한 책이긴 하지만 앞으로 더 나은 객체지향 프로그래밍을 하기 위해 도움이 될만한 글들도 실려있습니다.
정리하자면 자바를 공부했고 함수형 프로그래밍에 관심있어 입문하려는 사람들이 초기에 궁금해 할 사항들이 잘 설명되어 있습니다.
다만 어딘가 도입해서 바로 쓰고자하는 쿡북 스타일의 책은 아니므로 유의하시기 바랍니다.
제가 함수형 언어를 사용해본 적도 없고, 해당 분야 책을 보는것도 이번이 처음이라 좋다 나쁘다를 평가하기가 어렵지만 괜찮은 책인거 같습니다.
100페이지정도의 입문서라서 기본 자료구조예제 이상의 코드는 나오지 않는다는 아쉬움이 있었고,
챕터마다 연습문제들이 나오는데 해답은 제시되지 않아서 아쉽습니다. 각자의 해답들이 올라와있는 사이트가 존재하면 좋을거 같긴한데
전자책이라 바라는 점
" 앞에 있는 “선언적 vs 명령형 프로그래밍”의 내용을 기억해보라. " 나 " 프로그래밍[Goetz2006 참고]을 제대로 " 같은
구문에서 링크같은게 되어서 클릭시 그 부분으로 이동되었으면 좋겠다는 생각이 드네요.
설명하기 위한 단어들이 어렵고
내용이해하는것이 조금 어렵네요