2017년 12월 13일 수요일

서평 [IT 트렌드 스페셜 리포트]를 읽고

IT 트렌드 스페셜 리포트

이 책은7가지의 IT 기술을 개괄적으로 설명을 하고 있다.

어찌보면, 누구나 들어봤을 이야기들이다. 이 책이 아니더라도 어디서든 IT트렌드들은 읽을 수 있을 것이다.
하지만 이 책이 다른 점은 IT트렌드가 무엇인지를 알려주는 것이 아니다.
실제 우리가 들어본 IT기술들이 어떻게 쓰이고 있는지 알려준다. 단순히 이곳에서 쓰이고 저곳에서 쓰인다로 끝나는 것이 아니라.
어떻게 설계되어 있는지 무엇을 확인해야 하는지 그런 실질적인 내용도 담고 있다.

또 눈여겨 보아야 할 점은 현업에 종사하는 사람의 이야기와 그들이 실제로 어떻세 사용하고 있는지 적어노았다.
단순히 근무환경이나 비전을 묻는 것이 아닌, 실제 기술을 묻는다.

이 책은 단순히 넓은 식견을 넓혀주는 것이 아니라.
놓치기 쉬운 부분들. 어쩌면 IT트렌드를 쫓아가야 할 때, 알아야할 세세한 부분을 설명한다.
물론, 책의 내용은 적지만 어디를 보고 나아가야 할지 짚어준다.

하지만 짧은 페이지 수는 좀 아쉬울 수 있다. 좀 더 많은 사례들이 나왔으면 싶었다.
각 장당 한 회사의 사례만으로는 성이 차지 않는다.

그럼에도 읽을 만한 가치가 있다고 생각한다.

2017년 12월 3일 일요일

[clojure][designpattern] 클로저 디자인패턴 - 전략패턴

clojure design pattern 출처::http://clojure.or.kr/docs/clojure-and-gof-design-patterns.html
2. 전략패턴(Strategy Pattern)
요약 : 이름 정렬 , 유료고객은 먼저.

(def users [{:subscription true :name "Y"} {:subscription true :name "Z"} {:subscription false :name "Z"}])

(sort (comparator (fn [u1 u2]
                    (cond
                      (= (:subscription u1) (:subscription u2))
                      (neg? (compare (:name u1) (:name u2)))

                      (:subscription u1)
                      true

                      :else
                      false)))
      users)
위 소스는 comparator를 만들고 하는 것이 아주 비슷하다.
아래 소스를 봐보자.
(sort-by (juxt (complement :subscription) :name) users) ;; forward sort
(sort-by (juxt :subscription :name) #(compare %2 %1) users) ;; reverse sort
워워 하나씩 보자.
(sort-by count ["aaa" "bb" "c"])

("c" "bb" "aaa")
juxt 이녀석은 뭘까? (juxtaposition : 병렬, 병치)
((juxt a b c) x) == [(a x) (b x) (c x)]
(for [user users]
  ((juxt :subscription :name) user))
;; ([true "Y"] [true "Z"] [false "Z"])


(for [user users]
  ((juxt (complement :subscription) :name) user))
;; ([false "Y"] [false "Z"] [true "Z"])

complement (보수 말하는건가) : 함수를 받아서 true/false의 반대값을 내보냄
(def odd?? (complement even?))
(odd?? 3)
true 
이걸 먼저 알아보자
(sort-by (juxt (complement :subscription) :name) users) ;; forward sort
user=> ((complement :subscription ) {:subscription "HI"})
false
user=> ((complement :a ) {:b "HI"})
true

두 줄로 만들어지는 것이 신기하다. juxt는 엄청난 함수 인 것 같다. 나중에 쓸일이 많을 것 같다.