Clojure에서 키워드는 앞에 :이 붙은 요소인데, 설명을 읽어봐도 잘 이해가 되지 않으므로 사용용도를 통해 그 정체를 기억하자.


맵의 이름은 함수처럼 사용해서 데이터를 참조하는 것이 가능한데, 키워드를 키로 지정할 경우, 이 키워드도 함수처럼 사용하는 것이 가능하다. (다른 맵 간에 키워드 중복 사용도 무방)



맵 정의

(def planet {:name "earth" :type "terrestrial"
        :satelite {:sateliteName "moon" :alternateName "luna"}})


데이터 참조

; 아래 세 구문 모두 같은 값 "terrestrial"을 갖는다.

(planet :type)
(get planet :type)
(:type planet)  ; 만약 키가 "type"(문자열)이라면, 이런 식의 사용은 불가능하다.

-> "terrestrial"


연쇄 참조

; 아래 세 구문 모두 같은 값 "luna"을 갖는다.

(:alternateName (:satelite planet))
(-> planet :satelite :alternateName)
(get-in planet [:satelite :alternateName])

-> "luna"


키가 존재하지 않을 경우

; 존재하지 않는 키인 키워드를 사용할 경우 nil을 반환한다.

(:orbit planet)

-> nil


키워드에 네임스페이스 사용

; / 기호를 사용해 키워드에 네임스페이스를 줄 수도 있다.

(:etc/alternateName {:name/sateliteName "moon" :etc/alternateName "luna"})

-> "luna"


<테스트 환경>
- OS : Windows 10
- Leiningen 버전 : 1.0.0
,