10. 아쉬운 마무리 그리고 느낀점
• 선언적 사고를 통해 우연적 복잡성이 낮아진것 같
다.
• REPL 로 인해 테스트 먼저의 흐름을 잊었다.
• 그리고 쉽지는 않다.
• 결국 친숙함이 문제
• 클로저를 어디다 써먹지에 대한 고민이 별로 없어
• 첫번째 스터디와 마찬가지로 그저 호기심으로
끝!
11. 세번째 스터디
• 이전 스터디의 아쉬움
• 사내 스터디 조직
• 일단 미끼는 JAVA 8
• 함수형에 대해서 진지해짐
28. 불변성
• 불변성은 멀티쓰레드 환경에서 안전하다.
• 영속적 자료구조
( def a ’ ( 1 2 3 ))
( def b ( cons 4 a ))
29. 부수효과가 없는 함수
• 오로지 인자로만 결과가 만들어지고 반환값으로
만 외부에 영향을 준다.
• 데이터의 불변성은 부수효과를 없게 만든다.
• 부수효과가 없는 함수는 테스트하기 쉽다.
30. 고계함수
• 함수를 인자로 받고 동적으로 함수를 반환하는 함
수를 다루는 함수
• 코드 구성을 쉽게 해준다.
(defn blank? [s] ( even? #( Character/isWhitspace % ) s ))
(filter #(even? %) [1 2 3 4] ))
à ( 2 4 )
(map #(< 3 % ) [1 2 3 4] ))
à ( 1 2 )
31. 익명함수
• 함수가 하는 일에만 충실하면된다.
• 그 많은 Interface 명을 외우지 않아도 된다.
32. 선언적 프로그래밍
• 명령형적인 프로그래밍에서는 문제 자체에 집중
하지 못하기 때문에 Bug발생의 빈도가 높다.
로컬변수 선언 로컬변수 할당
분기문
반복 제어 탈출
33. 선언적 프로그래밍
• 불필요한 명령이 없어 마치 정의 하는 듯 보인다.
• 선언을 통해 세부 구현을 숨기고 오로지 함수인자
와 반환되는 값에 관심을 가질 뿐이다.
• 코드의 이해도가 높아진다.
(defn blank? [s] ( even? #( Character/isWhitspace % ) s ))
40. 클로저에 대한 오해 I
• 괄호,괄호,괄호
– 실제 비교해보면 약간 많을 뿐 그렇게 과하지 않다.
– 다른 LISP 과 다르게 괄호를 많이 제거 했다.
• 전위표기법은 불편해
– 자 어떤가?
( + 1 2 3 4 5)
( 1 + 2 + 3 + 4 + 5)
hBp://ntalbs.github.io/2014/04/08/clojure-fallacy/
41. 클로저에 대한 오해 II
• 현업에서 사용하지 않는다.
– hBp://clojure.org/Companies
– Amazon, Neglix, Facebook 등 175여개 기업에서 사
용중이다.