Functional Programming Principles in Scala


  Scala 언어를 만든 마틴 오더스키 교수가 직접 강의하는 MOOC로써, 2012년에 제작된 것으로 추정된다. 강의 하나에 70달러 이상의 가격을 주고 수강을 완료하면 수료증을 받을 수 있다. 이 수료증은 Linked in 에 연동이 가능하다. 수료증이 필요하지 않으면 무료로 강의를 들을 수 있다. 나의 경우에는 돈을 주고 수강을 해야 돈이 아깝다고 생각하여 열심히 공부를 하는 스타일이므로, 이 강의 외에도 패키지로 수강할 수 있는 강의 5개를 한꺼번에 결제하여 10%의 할인을 받았다.


  내가 처음 Scala 언어가 있다는 것을 알고 공부를 시작한게 2016년이니, 참으로 늦게 시작한 것 같다. 함수형 프로그래밍이나 Scala, Haskell 에 대한 것이 있다는 것을 진작부터 알았으면 하는 아쉬움이 있다. 프로그래머로써 어떻게 공부를 해 나가야할 지 몰랐던 나의 미숙한 점도 있지만, 회사에서 프로그래머로써의 실력을 증진시키지 않는 회사 주변의 상사나 동료들 탓도 있는 것 같다. 결정적으로 Tizen Platform App 개발과 현업에서 전혀 사용하지 않는 아주 미세한 부분을 다루는 알고리즘 시험을 채택한 회사 때문에 저런 것들을 늦게 접한 면도 있다.


  이 강의에서는 일반적인 책에서 배울 수 있는 Scala에 대한 내용을 주로 다루고 있다. Currying이나  Higher-Order-Function, 각종 Collection (List, Set, Map 등), Pattern Matching 등이다. 이론을 설명할 때 위에 언급한 것들을 단순히 어떻게 사용하는지만 알려주는 것이 아니라, 구체적인 사례를 들거나 이론에 대한 원리를 알려주는 점이 아주 좋았다.


  이론 강의 수강 외에도 각 주차별 강의에 따른 실습 과제를 해야 이 과정을 이수할 수 있지만, 예전에 다른 강의에서 했던 별도의 시험은 없었다. 실습은 Scala 빌드 도구인 SBT(Simple Build Tool) 프로젝트로 제공한다. 위에서 배운 이론을 토대로, 실제 현업에서 다룰 법한 문제나 커먼하게 알려진 알고리즘(허프만 코딩, 아나그램)을 구현하는게 주 목적이었다.


  과제를 하면서 두 가지 깨닮음(?)을 얻었다. 먼저, Scala의 Pattern Matching이 아주 강력한 기능이라는 점이다. 내가 전에 알고있던 패턴 매팅은 단순히 Int, String 타입과 같은 Primitive 타입을 편하게 다루기 위한 것인데, 이 것은 패턴 매칭의 아주 일부분이었다. 각종 Object나 Tuple, Collection을 패턴매칭과 각종 Recursive 패턴 등을 이용하여 조합해서 사용하면, Java 에서는 찾아볼 수 없는 추상화가 가능하다.

  두 번째로 느낀 점은, 바로 기존의 Object를 다루기 위한 Set(자료구조 Set이 아닌, 특정한 데이터 집합을 다룬다는 의미)과 동일하게 사용할 수 있도록 Functional Set을 다루는 방법과 그 원리를 과제를 통해서 알게 되었다. 이 것이 함수형 프로그래밍의 강력한 추상화에 도움을 주는 것 같다. 말로는 설명하기가 힘드니, 이 강의를 참고하길 바란다.


  이 강의에서는, 함수형 프로그래밍의 깊은 원리에 대해서는 파해치지 않고, 다음 강의인 [Functional Program Design in Scala] 로 떠넘겼다(?). 내가 MOOC를 통해서 정말로 습득하기 원하는 이론인 Monad를 다루고 있다. 지금 이 포스팅에서 설명하고 있는 강의는 Scala나 Functional Programming을 처음 접하는 분들이나 Scala를 책으로 공부하는데 명확하게 이해가 되지 않는 분들에게 추천하고 싶다.

+ Recent posts