간만에 3일만에 미친듯 후다닥 레퍼런스 북을 봤다.
솔직히 말해서 전부 다 본건 아니다. 원서를 읽는 속도도 있고, 내 집중력의 한계도 있지만 뭔가 왠지모르게 즐겁게 레퍼런스를 오랜만에 본 느낌이다. 사실 이 책의 존재를 알게 된 것은 꽤나 오래됬지만, 봐야지 봐야지 하면서 계속해서 미뤄왔고 그러다 결국 내 “스칼라” 개발기술의 한계를 알게되면서 레퍼런스 북을 정독해야만 한다는 생각이 절실히 들게 되었다.
전체적인 느낌은, 이 책이 책이라기 보다는 뭔가 소설이나 강의를 하나 듣고 왔다는 느낌이 강하다는 것이다. 거의 대부분이 “예제” 위주로 설명되어 있고, 자바와의 차이를 많이 설명을 들려고 한다. 예컨데, 왜 immutable이 필요한지에 대해, 혹은 tail recursion이 왜 필요한지에 대해서 말이다. 인터넷에서 부분부분 찾아본 설명으로는 사실 한계를 많이 느꼈는데, 이 책을 통해서 스칼라를 하면서 이해하기 어려웠던 immutable, tail recursion, high-order function, trait, object, singleton object등에 대해서 말이다.
2014년에 처음으로 스칼라를 공부했으니 무려 4년만인가.. 그간 정말 기본도 모르고 스칼라를 써댔던 나 자신이 한심하다. 함수형 언어라기 보다는 그냥 collection에서 편리한 filter, map, find, max, min같은것들에만 혹해서 사용했는데, 기본적으로 함수형 언어가 “왜” 필요한지에 대해 이해하지 못하고 무턱대고 트랜드니깐 사용하려 했던 나는 정말 바보였다. 지난번 나는 유라임의 SNS관련 기능을 구현하다가HATEOAS에 대해 알고, Spring REST가 얼마나 편리하게 제공해 주는지에 대해 알고서는 홧김에 또 다시 스칼라와 플레이를 버리려고 했다. 이 얼마나 바보같은 짓이던가, 어떤 프레임워크던 실상 그 근간은 비슷비슷하지만, 또 다시 이러저러하게 프레임워크를 바꾼다는 것은 결국 나 스스로의 이랬다 저랬다 하는 성격을 그대로 보여주는 것과도 같다.
어쨌든, 이 책을 보며 많은 의문이 해결되었다. 그런데 앞에서도 말했지만 다 읽은 것은 아니다. Chapter 1~12, 15~18, 24, 25, 32 만 읽었다. 1~12는 스칼라의 기본과 Function, Closure, match, class, composition & inheritance, Trait에 대한 내용이고 15~18은 case class, pattern matching, list, collection, mutual object에 대한 내용, 24,25는 collection에 대한 심도있는 애용, 32는 future와 concurrency에 대한 내용이다. 물론 다른 챕터도 훌륭한 내용을 많이 담고 있지만, 다음에 한번 더 정독할 때 읽기로 하고.. 너무 한번에 다 해버리면 재미없으니(?)
좌우간 여러모로 스칼라라는 것이 자바에서 생긴 문제점을 해결하려는 노력이 옅보였다. 메모리를 최소한 활용하려 하는 부분, tail recursion이 그랬다. class의 생성을 최소화 하기 위한 case class, 단순 if문이 아닌 모든 것이 리턴형이 있는 pattern matching또한 그랬다. 스칼라의 Future또한 많은 것을 담고 있다. 많은 부분이 마틴 오더스키의 그 철학을 절실히 담고있다는 생각이 들었다.
여튼 이 책은 두꺼운 두께만큼 스칼라의 많은 것을 담고있는 것은 사실이다. 하지만 너무나도 장황한 내용 때문에, 사실 그리고 예제등을 통해 풀어서 쓴 내용도 많지만.. Scala Cookbook위주로 책을 본다면 실상 스칼라라는 것이 아주 많은 새로운 사실을 담고있는 것도 아닌 것 같다. 어쨌든, 모든 것이 f(a) = b 와 같은 함수로 통용된다는 사실에만 근거하면 되는 것 같다. 스칼라는 되려 하이브리드 함수형 언어니깐, 가끔 예외가 있어도 된다. 온전히 함수형 언어로 프로그램을 짠다는 자체가 주는 이점과 그 만큼의 리스크도 존재하는 것은 사실이니깐.
모든 것에는 장단이 있는 것 같다. 여하튼 나는 스칼라를 오랫동안 써왔고, 그 만큼 앞으로 스칼라를 사용하는데에 있어서 이 책을 정독한 것이 보다 더 큰 밑거름이 되었으면 좋겠다. 유라임 이후로는 더 많은 함수형언어, 예컨데 Swift나 Kotlin도 써보고 싶다. 그런식으로 커리어를 설계해보는 것은 어떨까, 분명 언젠가는 또 다른 패러다임도 나오겠지. 공부하고, 또 공부하자. 개발자의 숙명처럼 말이다.