On this page:
Clojure Memo
7.3

Clojure Memo

이 글들은 클로저(Clojure) 프로그래밍 언어를 공부하면서 얻게 된 지식들 중 일부를 정리한 것이다.

글들 중에는 클로저를 공부하면서 지녔던 의문점들을 해결해 나가면서, 클로저 관련 서적들에도 자세한 설명이 없는 내용들도 일부 포함되어 있다. 인터넷을 검색해 모은 가능한 한 객관적인 자료를 바탕으로 내린 결론들이지만, 경우에 따라서는 제 개인의 주관적인 판단이 개입된 부정확한 분석 내용이 포함되어 있을 수 있음을 미리 밝힌다. 물론 그런 부분은 개인적으로 내린 추론임을 명시적으로 밝힐 것이다.

아울러 이 글들은 클로저의 기본 내용을 알고 있다는 전제 아래 쓰여져서, 클로저 초보자들이 이해하기에는 다소 어려움이 있을 수 있지만, 클로저를 좀더 깊이 있게 이해하고자 하는 사람들에게는 많은 도움이 될 것으로 믿는다.

코드 예제들은 다음의 표기법을 따른다. 참고로, 클로저에서 라인 코멘트(line comment) 기호인 ’;’ 기호를 이용해서, 이곳의 예제들을 Copy & Paste 해서 실행해 볼 때 불편이 없게 했다.

; >> 화면에 출력된 내용을 표시한다.
; << 키보드로 입력한 내용을 표시한다.
; => 함수의 반환값을 표시한다.

(defn get-name []
  (println "Enter Your Name:")
  (let [name (read-line)]
    (println "Hello," name)
    name))

(get-name)
; >> Enter Your Name:
; << Mr. Kim
; >> Hello, Mr. Kim
; => "Mr. Kim"

    1 Why Clojure?

      1.1 Clojure는 왜 OOP가 아닌가?

      1.2 Common Lisp은 함수형 언어인가?

      1.3 나는 왜 Clojure를 주력 언어로 선택했나?

      1.4 Clojure는 얼마나 빠른가?

      1.5 단순함(Simple)과 쉬움(Easy)의 차이

      1.6 Clojure의 발음과 의미

    2 Recursions

      2.1 Tail recursion(꼬리 재귀)

      2.2 Mutual tail recursion(상호 꼬리 재귀)과 trampoline 함수

      2.3 재귀 방식의 분류

        2.3.1 Accumulator passing style

        2.3.2 Continuation passing style

    3 Functional Patterns

      3.1 함수형 프로그래밍과 값의 변경

      3.2 Middleware pattern

    4 Vars

      4.1 Var와 Binding

      4.2 Symbol의 평가와 Var의 평가

        4.2.1 var가 가리키는 값이 함수가 아닌 경우

        4.2.2 var가 가리키는 값이 함수인 경우

    5 Testing

      5.1 deftest 매크로 & is 매크로

      5.2 are 매크로

      5.3 testing 매크로

      5.4 exception 테스트

      5.5 fixture 사용하기

      5.6 deftest- 매크로

      5.7 cljs.test

    6 Tips

      6.1 array-map

      6.2 coll? sequential? seq? 간의 차이

      6.3 매크로 이용시 주의 사항

      6.4 STM-aware agents

    7 core.async

    8 ClojureScript 소개

    Index