brunch

You can make anything
by writing

C.S.Lewis

by 석대진 Jul 08. 2016

Programming Scala

한빛미디어 '프로그래밍 스칼라'

O' Reilly 책들 중 "Learning"로 시작하는 책에 비해 "Programming"으로 시작하는 책들은 깊이있는 내용을 다루기 때문에 학습곡선이 큰 편입니다. Porgramming Scala도 예외는 아닙니다.


지금부터 다룰 예제는 이렇게 일찍 다루기에는 약간 벅차다.


첫 장부터 상당히 어렵게 느껴졌습니다. 개발언어 관련 책은 내용을 정확히 이해하지 않아도 예제를 여러번 수행해보면 내용보다 더 명확히 이해가 되는 경우가 많이 있습니다. 하지만 초반 예제부터 동시성 맛보기, Future 맛보기로 시작하는 이 책 예제에서는 그런 도움을 받을 수 없었습니다. 대신 물음표만 머리속에 가득 남았던 것으로 기억합니다.


Part I 스칼라와의 만남


Part I은 스칼라의 핵심적인 특징을 설명하고 있습니다. 그 핵심을 놓치게 되면 소스가 점점 모호해져 결국은 이해가 불가능했습니다. 그 때마다 "Part I"여기로 다시 돌아왔습니다. 제가 정확히 이해하지 못해서 돌아왔던 부분은 다음과 같습니다.


59페이지, 매개변수화한 타입 지정할 때 대괄호[]를 사용한다는 사실 : 어느 순간부터 [A]와 같이 배열도 아닌 이상한 문법이 보인다면, 59페이지를 다시 보시길 바랍니다. CPP, Java에 익숙한 개발자들은 제네릭으로 알고 있는 꺽쇠<> 표기법을 Scala에서는 대괄호[]를 사용합니다. 그리고 제네릭이 아닌 매개변수화한 타입이라고 부릅니다. 지금 생각해보면 제네릭이라는 모호한 표현보다, "매개변수화한 타입지정" 이라는 표현이 더 명확한 것 같습니다.


91페이지, 2.5.2 인자 목록이 여럿 있는 메서드 : 함수명 뒤에 이해가 되지 않는 ()(), 혹은 (){} 등이 나타난다면 91페이지를 다시 봐야합니다. 스칼라는 함수 본문을 변수 값 대입하듯이 =(등호)를 사용합니다. 함수명과 =(등호) 사이에있는 모든 (중)괄호는 모두 함수에 넘겨지는 인자(파라메터)입니다. ()에 인자를 넣고, 바로 뒤 {}에 람다 함수를 넣게되면 일반적인 다른 언어의 함수정의와 비슷하게 보여 정확히 알고 있지 않으면 혼란스러울 수 있습니다.

draw(Point(1.0, 2.0)){str => println(s"ShapesDrawingActor: $str")}


함수를 정의한 것이 아니라 draw에 Point(1.0, 2.0), str => println(s"ShapesDrawingActor: $str") 인자를 전달한 것입니다.


120페이지, 2.9 Option, Some, None : 이 장은 충분히 이해하고 넘어갔다고 생각했는데도 익숙하지 않아서인지, 나올 때 마다 다시 돌아와서 여러번 읽었습니다.


그 외에 _ 위치지정자, 중위 표기법, 콜론(:) 등은 아직도 소스에서 나타나면 어색합니다.



Part 2 기본기 다지기

Part 1에서 충분한 기본기가 생겼다면, "4장 패턴 매칭"과 "5장 암시"에서 이 책의 진가를 서서히 느낄 수 있도록 구성되어 있습니다. 그리고 "6장 스칼라 함수형 프로그래밍"은 갑자기 저자가 바뀌었나 생각될 정도로 쉽고 자세하게 작성되어 있습니다. 하지만 함수형 프로그램밍의 재미를 알기에는 조금 부족했던 것 같습니다.
( 참! 저자가 두명입니다. 누가 썼는지 궁금하네요. )


이후 for 내장, 객체지향 프로그래밍, 트레이트, 객체 시스템, 컬렉션 라이브러리를 다루고 있습니다.



Part 3,4

Part 2까지 완독했다면, Part 3는 정말 깊이 있는 내용을 다루기 시작합니다. 스칼라의 타입시스템, 함수형 프로그래밍의 카테고리, 펑터, 모나드를 다루고 있습니다.


Part 4에서는 Part 1에서 맛보기만 보여줬던 Future, Akka를 다시 설명하며, 빅데이터, 동적 호출, 도메인 특화언어 등 더욱 실무에 가까운 예제를 설명합니다.


"21 스칼라 도구와 라이브러리"는 Part 4에 있는게 조금 이상합니다. 예제를 실행하기전에 읽어 놓으면 스칼라 환경을 구성하는데 도움이 됩니다.


단점, 메소드 설명을 위한 '단축url'


책을 읽는 동안 종종 나와서 눈을 괴롭힌 단축url


이 책의 단점하나를 애기하라고 한다면, 종종 ()를 감싸서 나오는 단축url입니다. 글을 읽는데 너무 방해되는 요소였습니다. 특히 스칼라 함수명 뒤에 괄호()는 다른언어에 비해 조금 더 신경쓰이기 때문에, 이 단축url은 절 충분히 괴롭혔던 것 같습니다. 미주나, 각주로 처리했으면 좋지않았을까 생각합니다. 그리고 책을 읽고 실제 개발할 때 스칼라 문서를 찾는 방법을 알고 있어야하는데, 단축url은 그런 학습 및 경험에 대한 방해되는 요소라고 생각합니다. 또한 추후 url이 바뀌거나 언어가 버전업되었을 때 잘못된 정보가 종이로 영원히 남아 있을 수도 있겠네요.


오랜만에 두꺼운 책을 소화한 것 같습니다. 보통 예제 하나하나 손으로 쳐가며 천천히 읽어보는데, 리뷰기간이 정해져 있어 Part 3, 4장은 정상적으로 소화하지 못했습니다.


Programming in Scala을 반쯤 읽고 있는 중에 이 책을 받았습니다. 그래서 읽기를 잠시 중단하고 이 책부터 읽기를 시작했습니다. Programming in Scala에 비해 Programming Scala에서는 문장이 잘 이해가 안되어 몇 번이나 다시 읽었습니다.


하지만, 지금 다시 생각해보면 Programming Scala가 여러가지 측면에서 조금 더 깊은 이해를 요하고 있기때문에 문장을 잘 이해하지 못한 것 같습니다. 앞으로 스칼라가 얼마나 인기를 얻게 될지는 모르겠지만 어느 분의 말처럼, 곁에 두고있으면 분명 도움이 될꺼라 생각합니다.



본 리뷰는 한빛미디어에서 제공된 책으로 작성되었습니다.


작가의 이전글 개발자의 불안, 당신만 그런 것은 아니다.
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari