clojure에 대한 생각들

요즘 wekaJDM 같은 데이터 마이닝 자바 패키지에 관심을 보이고 있는데, 실제 자바로 데이터 처리를 하고 요런 라이브러리에 넣을 라고 하니 영 불편하게 아니다.
원래 이런 것을 돌릴때는 데이터에 이런 저런 추가적인 작업을 많이 해준다. scaling은 기본이고 몇가지 필드를 추가해보고 돌려보고, 빼고 돌려보는 과정을 수도없이 반복해보는 과정이다. 물론 이런 과정은 경험에 따라서 단축이 될수 있는 부분이지만 자신이 그렇게 정확히 알지 못하는 도메인에 대해서는 이런 과정을 거치는게 필수다.
개인적인 생각으로는 빠르게 데이터를 바꾸고 테스트 하는 과정을 단축시켜야 하는 데이터처리 엔지니어에게는  자바는 그리 효과적인 언어가 아니다.
그래서 Python이나, Ruby같은 언어들이 이런 테스트 작업에는 적합하나 이런 마이닝 작업을 좀더 큰 프로젝트로 바로 끌고 갈수 없는 단점이 있다. 그저 프로토타이핑에서 끝이난다. 그래서 자바같은 언어로 다시 구현을 하는 작업이 수행이 된다.

그래서 찾아본게 바로 clojure다.

자바언어는 별로 그닥 즐겨 좋아하지 않지만, 상황이 여의치 않으니 한다리 걸치고 있어야할 뭔가 중간가교 역할을 하는 언어라고 봐야 하나?
자바의 좋은 표준 라이브러리들을 Lisp형식의 함수로 살짝 훔쳐서 사용할 수 있다는것이 정말 환상적이다.
게다가 두뇌를 구석구석 고르게 자극 시켜주는 함수형 언어니…(몇일전 형준님이 Map/Reduce 프로그래밍이 재밋다고 말씀 하셨는데 아마 그런 재미와 많이 비슷하리라 본다. 함수형 언어든 MR이든 같은 문제를 해결하는데 다른 각도로 생각하게끔 문법(?)적으로 강제하기 때문이다)

그러나 이 언어 때문에 SICPPractical common Lisp을 다시 보고 있다. ㅡㅡ;

관심이 있다면 처음 시작하기에 좋은 몇가지 문서를 소개한다.

Clojure Tutorial For the Non-Lisp Programmer

Clojure Programming

20 Days of Clojure

그리고 제일 마지막에 상세히 읽어보게 될
www.clojure.org

그리고 좀 기다려야할 Programming Clojure 일단 이 책은 나의 위시리스트에 들어 있다. ^^

Lisp과 scheme을 재밋게 배워봤던 경험이 있고, 이것들의 실용성에 실망을 했던 분들은 clojure에 반드시 폭~ 빠질꺼라 생각한다.

마지막으로 clojure를 이용한 스크립팅 처리를 하기 위해 간단하게 구현한 파일 처리 모듈을 첨가해 본다.
자바를 아는 분들은 이 언어에서 자바 라이브러리를 참조하는것이 신기해 보이실 것이다.

자바 코드에서처럼 java.io의 FileReader와 BufferedReader를 이용해서 파일을 라인 단위로 처리하는 프로그램이다.

 (fileread “./test.clj” (fn [x] (println x)))

첫번째 인자는 파일 이름이고 두번째 인자는 파일 각 라인에 대해서 처리할 Anonymous Functions을 넘긴다. 여기서는 그냥 println으로 출력하는 일만 하는데 나중에 내가 각 라인에 대해서 처리할 작업을 할 함수를 넘기면 편리할 것이다.

[CODE javascript]

(import ‘(java.io FileReader BufferedReader))

(def filedo)

(defn fileread [fn f]
    (let [fp (new BufferedReader (new FileReader fn))]
        (filedo fp f)
        (. fp close)
    )

)

(defn filedo [fp f]
    (loop [line (. fp readLine)]
        (when (not (nil? line))
            (f line)
            (recur (. fp readLine))
        )
    )
)

[/CODE]

코드를 보면 눈치 챘겠지만 clojure가 Java와 상당히 밀접한 관계가 있다는 사실을 알 수 있다. 특히 clojure의 여러 데이터 구조나 문법들이 자바언어로 어떻게 포팅이 되는지 살펴보는건 언어 배우는 이상의 묘미와 clojure언어의 문법을 더 효과적으로 배우는 수단이 될 것이다. 

추후에 clojure Weka 라이브러리를 이용한 데이터 처리에 대해서 설명해 보겠다.

CC BY-NC 4.0 clojure에 대한 생각들 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.