클로저 1

1,207 views
1,143 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,207
On SlideShare
0
From Embeds
0
Number of Embeds
69
Actions
Shares
0
Downloads
8
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

클로저 1

  1. 1. 클로저<br />나철환<br />
  2. 2. 클로저를사용해야되는 이유<br />클로저는우하하다<br />Lisp의 특성을 가지고 있다.<br />함수형 언어이다.<br />병행 프로그래밍 간단히 만들수 있다.<br />자바를 포함한다.<br />
  3. 3. 클로저– 우하하다<br />
  4. 4.
  5. 5.
  6. 6. Lisp 특성을 가지고 있다.<br />
  7. 7. 왜 Lisp인가? <br />
  8. 8. 매크로 – 개발자 자신의 목적대로 변형해서 사용할 수 있도록 만들어 주는 도구이다.<br />
  9. 9. 다른 언어에서는 private나 class의 의미가 정해져 있는데 Lisp는 매크로를 이<br />용해서 새로운 의미로 줄 수 있다.<br />private의의미를 ‘단위 테스트와 직렬화의 경우에는 public이지만,<br />배포 시에는 private’으로 의미를 바꿀 수 있다.<br />
  10. 10. Lisp는괄호로만 이루어져 있어서 간단하고일관성이 있지만 초보자에게는 걸림돌이이다. <br />클로저는 이런 어려움을 덜어 주기 위해서 몇 가지 방법을 사용하고 있다.<br />
  11. 11. 클로저는 리스트, 맵, 집합 등 다양한 자료 구조를 표현하기 위해 간단한 문법을 제공한다.<br />예) 함수의 인자는 리스트 대신 벡터로 표현 (즉, () 대신 []으로 표현한다)<br />
  12. 12. 쉼표를 공백으로 인식<br />Lisp 경우 – (1 2 3)<br /> [1, 2, 3]<br />
  13. 13. 괄호를 꼭 필요한 곳에만 사용<br />
  14. 14. 클로저- 함수형 언어<br />
  15. 15. 함수형 언어 특성<br />함수는 ‘일급 객체’다. 즉, 함수가 실행 중에 생성되고, 인자를 넘겨지며, 반환될 수 있고, 다른 자료구조처럼 다뤄질 수 있다.<br />데이터 값은 변경 불가능하다.<br />함수들은 부수효과를 가지지 않는다.<br />
  16. 16. 과거에 함수형 언어들이 별다른 관심을 얻지 못했는데 , 클로저는 왜 주목을 받는 것인가?<br />
  17. 17. 시기 – 멀티코어 하드웨어의 수가 대폭 늘어나고 있고, 함수형 언어는 멀티코어에 이점을 활용할 수 있는 명확한 방법을 제공<br />대부분 함수형 언어는 동적이지만 클로저는 동적이기 때문에 배우고 접근하기 쉽다.<br />클로저는 자바 호출은 함수형 접근방식을 취하지 않는다.<br />
  18. 18. 클로저– 병행 프로그래밍 간단히 만들 수 있다.<br />
  19. 19. 함수형 언어이기 때문에 데이터를 변경하는 것이 불가능하기 때문에 다른 스레드에 의해 데이터 변경되어 오류 나지 않는다.<br />또한 트랜잭션을 이용해서 어느 순서로 잠궈야 할지 고민할 필요가 없게 된다.<br />
  20. 20. 클로저– 자바를 포함한다.<br />
  21. 21. 클로저는 자바를 별도의 계층 없이 바로 호출이 이루어 진다.<br />클로저는 자바를 편하게 호출하기 위해서 여러가지 문법 장치를 있다. (3장에서 자세히~)<br />
  22. 22. 클로저 코딩 고고씽~ <br />
  23. 23. “Hello World”<br />(println “Hello World”)<br />출력값<br />Hello World<br />nil<br />
  24. 24. 함수를 하나 만들어 보자<br />
  25. 25. (defn hello [name] (str “Hello, “ name))<br />함수를 정의<br />
  26. 26. (defn hello [name] (str “Hello, “ name))<br /> 함수 이름<br />
  27. 27. (defn hello [name] (str “Hello, “ name))<br />Hello는 name이라는 하나의 인자를 받는다.<br />
  28. 28. (defn hello [name] (str “Hello, “ name))<br />Str은 여러 인자를 받아 하나의 문자열로 연결하는 함수다.<br />
  29. 29. 반환 값<br />#’user/hello<br />#은 이 함수가 크롤저 ‘ver’에 저장 되었음을 나타낸다.<br />user은 이름공간이다.<br />(자세한 것은 2장에서 )<br />
  30. 30. 함수 사용<br />(hello “Stu”)<br />출력<br />Hello, Stu<br />
  31. 31. 특별 변수<br />
  32. 32. 최근에 입력된 표현식 결과 3개를 <br />*1, *2, *3이라는 특별 변수에 저장하고 있다.<br />
  33. 33. (hello “Stu”)<br />출력값- “Hello, Stu”<br />(hello “Clojure”)<br />출력값– “Hello, Clojure”<br />(str *1 “ and” *2)<br />“Hello, Clojureand Hello, Stu”<br />
  34. 34. 공유 상태 추가하기 <br />(이해를 못해서 죄송합니다.)<br />
  35. 35. 클로저 라이브러리 <br />
  36. 36. require – 클로저 라이브러리 로드<br />(require ‘examples.introdution)<br />(take 8 ‘examples.introdution/fibs)<br />출력 (0 1 1 2 3 5 8 13)<br />피보나치 수열에 대한 구현 포함<br />
  37. 37. Refer – 현재 이름공간의 모든 이름을 새로운 이른 공간으로 대응 <br />(refer ‘examples.introdution)<br />(take 8 fibs)<br />출력 (0 1 1 2 3 5 8 13)<br />
  38. 38. use – refer 과 require 모두 사용가능<br />(use ‘examples.introdution)<br />(take 8 fibs)<br />출력 (0 1 1 2 3 5 8 13)<br />(use :reload-all ‘examples.introdution)<br />(take 8 fibs)<br />출력 (0 1 1 2 3 5 8 13)<br />
  39. 39. 끝<br />

×