위에 첨부된 알마인드 마인드맵 파일은 2 개의 Tab 으로 구성되어있습니다.
1 번 탭은 방송에 맞는 Mini Version 이구요.
2 번 탭은 방송을 준비하면서 제가 고민했던 Max Version 입니다.
(get map key)
get 을 쓰기 위해서는 key 가 필요하다.
list 는 map 이 아님으로 get 을 써도 의미가 없다. nil 을 반납한다.
map: key 와 value 쌀들
vector: 위치를 key 로 하는 map
set: 값을 key 로 하는 map
(doc get)
-------------------------
clojure.core/get
([map key] [map key not-found])
Returns the value mapped to key, not-found or nil if key not present.
nil
(nth coll index)
nth 는 순서가 있는 collection 이어야 쓸수 있다.
결국 순서가 없는 collection 인 map 과 set 을 쓸 수 없다.
(doc nth)
-------------------------
clojure.core/nth
([coll index] [coll index not-found])
Returns the value at the index. get returns nil if index out of
bounds, nth throws an exception unless not-found is supplied. nth
also works for strings, Java arrays, regex Matchers and Lists, and,
in O(n) time, for sequences.
nil
Null (Nil) 이란 무엇인가?
Null 은 값이 없음을 뜻합니다. 예를 들어 보도록 하죠.
- 출판하기 전 서적의 ISBN
- 군대 가기 전 남자의 군번
- 솔로들의 애인 성명
어느 시점에 그 값이 정해질 수도 있지만 영원히 안 정해질 수도 있죠.
프로그램에서는 이렇게 정해지지 않을 값을 Null 이라고 합니다.
외계인(개발자)들이 아닌 경우 Empty 라고 표현하는 것이 더 이해하기 쉬울 것 같습니다.
키워드(: 으로 시작)를 함수로 사용하는 이유
Clojure 의 경우 소문자로 감싸여진 있는 Form 을 통해 함수를 실행하게 됩니다. 아래와 같은 형식이죠.
(함수 함수의인자1 함수의인자2 .. 함수의인자n)
Map 으로 부터 특정 값을 가져오는 form 을 만들어 보면
(get 맵 키워드)
형태입니다.
keyword 를 함수로 사용하면 위의 form 을 간단하게 사용할 수 있게 됩니다.
(키워드 맵)
map 은 key 와 value 의 쌍들을 저장하고 있는 자료 구조입니다.
map 은 프로그래밍에서 아주 유용하게 쓰이게 되는 데요. 일반적인 업무에서 많이 쓰이는 표가 바로 map 형태이기 때문입니다.
Null(Nil) 과 Map 그리고 keyword 종합 예제
위와 같은 표가 있다고 했을 때 배경색이 핑크인 셀들이 바로 Null 인 경우입니다.
위 표에서 초보람보가 있는 행을 Map 으로 표현해 보면 아래과 같습니다.
{ :학번 3, :성명 "초보람보", :나이 17, :전공 "자바", :군번 "579", :대표서적 "자객" }
이 Map 을 쉽게 접근하기 위해 define 으로 novicerambo 라고 하는 symbol 로 참조할 수 있게 해보겠습니다.
(def novicerambo { :학번 3, :성명 "초보람보", :나이 17, :전공 "자바", :군번 "579", :대표서적 "자객" })
이 Map 에서 제가 원하는 나이 부분만 가져오겠다면 get 함수를 사용할 수 있습니다.
(get novicerambo :나이)
여기서 keyword 인 :나이를 함수로 사용할 수 있기 때문에 바로 위 식을 짧게 아래와 같이 고쳐 쑬 수 있습니다.
(:나이 novicerambo)
결론적으로 (get novicerambo :나이) 라고 써야하는 것을 (:나이 novicerambo) 로 줄여서 쓸 수 있다는 것인데, 개발자들은 이렇게 타이핑이 들어드는 것을 무척 선호하는 경향이 있습니다. 그리고 앞으로 공부하게 되면서 키워드를 함수로 사용함으로 인해 많은 이득을 얻게 되는 경우를 보게 될 겁니다.
참고(지금은 잘 몰라도 되지만): 위의 표 전체는 Map 들의 Vector 로 표시할 수 있습니다.
[
{ :학번 1, :성명 "Toby", :나이 25, :전공 "스프링", :군번 "123", :대표서적 "토비의 스프링" }
{ :학번 2, :성명 "Kevin", :나이 24, :전공 "스칼라", :군번 "345", :대표서적 nil }
{ :학번 3, :성명 "초보람보", :나이 17, :전공 "자바", :군번 "579", :대표서적 "자객" }
{ :학번 4, :성명 "김지영", :나이 23, :전공 "주차달인", :군번 nil, :대표서적 nil }
]
위의 구조에서 성명만 갖고 오고 싶을 때는 map 이라는 함수를 사용하는데요. 여기서는 예제만 보이고 추후에 알아 보도록 하겠습니다.
(def table
[
{ :학번 1, :성명 "Toby", :나이 25, :전공 "스프링", :군번 "123", :대표서적 "토비의 스프링" }
{ :학번 2, :성명 "Kevin", :나이 24, :전공 "스칼라", :군번 "345", :대표서적 nil }
{ :학번 3, :성명 "초보람보", :나이 17, :전공 "자바", :군번 "579", :대표서적 "자객" }
{ :학번 4, :성명 "김지영", :나이 23, :전공 "주차달인", :군번 nil, :대표서적 nil }
]
)
(map :전공 table)
(map :군번 table)
(filter #(> (:나이 %) 23) table)
(filter #(= (:나이 %) 23) table)
(filter #(< (:나이 %) 23) table)
'Clojure 도전기(동영상)' 카테고리의 다른 글
Clojure 도전기 003 - 함수 (0) | 2015.11.06 |
---|---|
Clojure 도전기 001 - 설치와 개론(잡담) / 실제 도전은 다음부터 (0) | 2015.10.27 |