gilbut_joy_of_kotlin-01

평상시에도 코틀린으로 안드로이드를 개발하면서 대략 3년정도 코틀린을 써왔던 것 같다. 그래서인지 보통 내용과는 다를 것 같은 이 코틀린 책에 흥미를 가지게 되어 읽게 되었다.

책은 첫장부터 정말 멋졌다. 처음에 코틀린 개요에 대해서부터 설명할 때부터 흔히 생각할 수 있는 그런 방식으로 설명하지 않는다. 즉, 기본 개념을 설명할때부터 코틀린 답게 사용하는 법을 알려주면서 시작한다. 책 이름인 코틀린을 다루는 기술 에 정확히 들어맞는 내용이다.

그러다보니 코틀린을 배우지 않은 사람들에게는 매우 어려울 듯 싶다. 또한 코틀린을 다루는 법에 대해서 알려주지만 기본적으로는 함수형 프로그래밍 방법에 대해서 대부분의 책 내용을 할애하고 있다. 물론 그 설명할 시 언어를 코틀린으로 설명할 뿐이다.(자바와 비교하는 구문도 많이 보인다.) 이 또한 만약 함수형 프로그래밍을 처음 접하는 사람이라면 이 책을 읽는데만 시간이 얼마나 걸릴지 잘 모르겠다. 작성자의 경우도 함수형 프로그래밍에 대해 아직 익숙하지는 않아서 이해하면서 읽는데 시간이 오래 걸렸던 것 같다.(리뷰 마감일에 거의 딱 맞춰서 읽었다.)

이 책을 진행할 때 특이한 구성은 책의 내용을 설명하고 연습문제가 있는게 아니라 책 내용을 설명하기 위해 연습문제를 계속해서 내준다는 점에 있다. 개인적으로는 책을 읽을 때 바로 결과를 보고 끝내는 것이 아니고 스스로 생각해볼 수 있는 기회를 줄 수 있어서 마음에 들었던 구성이었다. 그래서인지 책을 읽는데 조금 오래 걸렸던 것 같다.

다만 아쉬웠던 점은 코틀린 진영에서 유행하고 있는 코루틴에 대해서는 따로 다루고 있지 않다. 만약 코루틴까지 코틀린답게 작성하는 법을 다뤘더라면 정말 이 책은 완벽한 책이 되었을 것 같다는 생각이 들었다. 하지만, 이에 대한 내용이 따로 없더라도 정말 “내가 사용한 코틀린은 그냥 자바문법을 따라한 것 뿐이구나” 라는 생각을 계속 들게 만들 정도로 만족하면서 읽은 책이다.

결론적으로 이 책을 구매하고자 해서 이 리뷰를 보시는 분이라면 무조건적으로 구매하기를 추천하고 싶다. 작성자의 경우도 아직 다 읽지도 않은 상태에서도 주변에 이 책을 계속 홍보하고 다닐 정도였다.

gilbut_joy_of_kotlin-02

책에서 첫장에 당연히 책을 읽어야 하는 이유에 대해서 알려주고 있다. 다만 특이점은 단순히 “왜 코틀린을 써야하나?” 에 집중해서 쓰여있지 않고 “왜 코틀린을 코틀린답게 써야하나” 에 대해서 설명해주고 있다.

2장에서는 전체적인 코틀린 프로그래밍 개요에 대해서 설명하는데 결국 코틀린 문법을 간략하게 설명하는 장이다. 하지만 이 장 또한 다른 책들과 다른점은 처음에 평범하게 코딩을 배웠다면 사용할 코드 스타일을 적어놓고 리펙토링을 해가면서 코틀린 문법을 왜 이렇게 써야한는지에 대해서 대략적으로 설명해준다.

3장에서는 함수형 프로그래밍으로 들어가기 위한 준비를 하는 장이다. 물론 이 장에서 함수형 프로그래밍의 원론적인 개념에 대해서 설명하는 것이 아니라 함수 기반으로 되어 있는 코틀린 언어를 함수형으로 작성하는 법에 대해서 알려준다. 그렇게 읽다보면 자연스럽게 함수형 사고를 하고 있는 자신을 발견할 수 있을 것이다.

4장은 함수형 프로그래밍을 할때 (절대적으로) 필요한 재귀,공재귀,메모화 에 대해서 다루고 있다. 이쯤에서 읽으면 알겠지만 계속해서 함수형 기법을 설명해주면서 코틀린으로 함수형 프로그래밍을 하는 방법에 대해서 이어나가고 있다. 특이한 정은 공재귀와 재귀의 차이점에 대해서 정확히 짚어주려고 하는 점이다.

5장에서는 리스트를 다루고 있다. 사실 함수형 프로그래밍을 할때의 장점이 리스트를 다루기 쉽다라는 점인데 이 부분에 대해서 코틀린에서는 어떻게 잡는지, 또한 코틀린의 List 가 어떻게 구성되어 있는지에 대해서 설명하면서 리스트를 다루는 방법에 대해서 알려준다.

6장에서는 널참조와 Option 에 대해서 설명하면서 함수형 프로그래밍에서 자주 등장하는 용어인 모나드 를 맛볼 수 있게끔 해준다. 특이한 점이 있다면 책 설명중에 모나드라는 말은 따로 안쓰다가 마지막에 “바로 이게 모나드에요” 라고 간단하게 말하고 넘어간다.

7장은 예외처리를 하면서 함수형 프로그래밍에서 에외를 처리하는 방법인 Either 에 대해서 배우게 된다. 또한 Exception 을 감싸고 있는 Result 에 대해서도 배운다. 그러면서 Result 를 잘 사용하는 방법에 대해서 구체적으로 알려준다.

8장에서는 7장에서 배운 예외처리 방법을 가지고 리스트를 아름답게 사용할 수 있는 방법에 대해서 알려준다. 사실 이 장은 위해서 5~7 장을 배운 듯 싶다. 이전 장에서 배운 개념을 가지고 리스트의 성능부터 시작해서 다양한 방법으로 리스트를 다루는 방법을 설명한다.

그 이후에도 계속해서 함수형 기법과 코틀린을 가지고 함수형으로 더 코틀린답게 어떻게 코딩하는지에 대해서 설명해준다.

부록또한 그냥 지나치기는 어려웠다. 부록조차 다른 책이였더라면 한 부분을 할애해서 만들어도 괜찮을 정도다. 부록A 는 자바와 코틀린을 함께 사용하는 방법에 대해서 알려주는데 안드로이드 개발자라면 레거시 때문에 알아야만 하는 정보에 대해서 설명해준다. 부록B 는 코틀린 테스트 방법에 대해서 알려주는데 개인적으로 궁금했던 부분이라서 더더욱 마음에 들었던 부분이였다.

gilbut_joy_of_kotlin-03

책을 다 읽고 나니 “와 이 책 정말 미쳤다.” 라고 생각이 들었었다. 이 책을 단순 코틀린 책이 아니라 함수형 프로그래밍에 대해서도 알려주고 코틀린을 어떻게 써야 하는지에 대해서도 알려준다. 단순히 언어 지식에 관련해서 다룬 책들 중에서 오랜만에 마음에 드는 책이였다. 나중에 기회가 생긴다면 이 책으로 스터디를 한번 열어보고 싶기도 하다.

다만 혹시 코틀린에 대해서 아무것도 모르는 분들이라면 다른 책을 권하고 싶다. 하지만 한번이라도 코틀린을 다뤄 본 사람은 이 책을 반드시 읽어보길 바란다.