처음 Clojure를 접한 것은 2년 전 겨울 런던 시내에서 있었던 Clojure 밋업에 갔을 때였다. 그 때까지는 Haskell를 공부하고 있어서 함수형 프로그래밍이 어떤 것인지 대충 알고 있었지만 실제로 업무에서 사용해 보지는 못하고 있었다. 밋업에서 나를 포함한 몇몇 초보자들은 온라인 사이트에서 아주 간단한 문제를 푸는 것으로 시간을 보냈는데 간단하게 문법을 익힐 수 있는 사이트였다. 괄호가 정말 많구나. 괴상하다. 솔직히 첫인상은 이랬다. 그 때부터 관심을 갖기 시작해서 책도 여러 권 사서 읽었다. Java를 싫어해서 JVM에 대한 막연한 불신이 있었는데 Clojure는 설치하기가 쉽고 텍스트 에디터에서 가볍게 코딩해서 결과를 볼 수 있고 Node.js처럼 REPL도 지원하니까 혼자 공부하기에도 Haskell보다 훨씬 쉬웠다. 괄호 때문에 시작과 끝이 어디인지 잘 모르겠는 괴상한 문법이지만 스타일에 익숙해지니까 문제가 되지 않았다. 좀 더 잘 쓰고 싶어서 업무에 도입을 시도했지만 잘 되진 않았다. 하지만 잘 알고 있는 로직을 Clojure로 구현해보면서 정말 많이 배웠다. 내가 Clojure를 쓰는 이유는.


Clojure는 함수형 언어다. Haskell처럼 pure functional 하지는 않다. 

함수는 pure하다는데, 헷갈리면 수식의 함수를 생각하면 된다. 입력이 같으면 출력이 같다. 

함수는 First-class object이고 나는 이 개념에 익숙하다.

데이터는 immutable 하다. 처음에는 이것 때문에 고생을 많이 했다.

괄호가 많은 이상한 문법을 가졌지만 스타일에 익숙해지면 문제가 되지 않고 그 덕분에 긴 함수를 만들지도 않는다.

처음 시작했을 때에는 개념과 예제코드부터 이해하기 어려웠지만 조금만 익숙해지면 에러가 잘 나지 않는 코드, 재사용이 쉬운 코드를 만들 수 있다. 


Haskell과 비교해도 장점이 있다. Haskell은 순수 함수형 언어이기 때문에 어떤 상태의 변화를 다루는데 어려움이 있다. 그런데 Clojure는 refs, agents, atoms 같은 기능을 제공하기 때문에 이 문제로부터 자유롭다. 그리고 dynamic typing을 지원한다. 경력의 반을 C로 프로그래밍 했지만 최근 몇 년 동안은 Node.js만 써와서 그런지 static type 언어를 쓸 때 무척 어색하다. 하지만 Clojure는 습관처럼 코딩해도 문제가 없다. Node.js의 destructuring object 개념처럼 Clojure에서도 destructuring을 해서 변수와 값을 바인딩해서 사용하는데 이 방식이 아주 마음에 든다. 그리고 병렬 프로그래밍에 대한 개념도 정말 멋지다. 이건 나중에 자세히. 


지금도 Haskell의 문법이 가장 아름답다고 생각하고 Clojure의 문법은 괴상하다고 생각하지만 쓰면 쓸수록 Clojure는 장점이 많은 언어라고 생각한다.


참고


Clojure 공식 사이트

https://clojure.org


Clojure 문서 

http://clojure-doc.org

http://clojuredocs.org/quickref


Clojure 툴박스

https://www.clojure-toolbox.com


초보자가 문제 풀면서 문법을 익히기 좋은 사이트

http://www.4clojure.com


15분완성

https://adambard.com/blog/clojure-in-15-minutes



Posted by 코딩새싹
,