Your SlideShare is downloading. ×
Clojure/Chapter3
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Clojure/Chapter3

744
views

Published on

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
744
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 3. 자바와 사용하기 아키텍트를 꿈꾸는 사람들 양창선
  • 2. Contents  시작 하며  장점  문법
  • 3. 자바를 몰라요  정의가 틀리고 횡설수설할 가능성 농후  이해 못해 넘어가는 부분도 다수  발표가 아니라 역으로 가르쳐 주셔야 할지도..  그래서 문법보다 정의위주로 합니다.  다 읽어 오셔서 아실 꺼라 믿습니다.  나름 열심히 공부는 했어요 http://cafe.naver.com/happyzzx.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=9700
  • 4. 클로저의 자바 지원은 매우 강력  Lisp의 표현력과 자바에 특화된 편리한 문법을 동시에 취할 수 있다는 점에서 강력하다.  자바와 자바 라이브러리를 포용 해서 강력하다.
  • 5. 클로저의 자바 지원은 매우 간결  상호 작용에 군더더기가 없어 간결하다.  바이트 코드로 컴파일이 되며 별도의 계층을 거 치지 않는다.  자바코드를 LIsp로 감싸지 않고 바로 접근 할 수 있다.
  • 6. 클로저의 자바 호출  클래스, 인스턴스, 생성자, 메서드, 필드 등 어떤 자바 코드에도 접근할 수 있다.  간편한 문법을 제공  자바 코드를 직접 호출하거나, 자바 API를 함수 형 스타일로 감싸서 사용하는 것도 가능 하다.
  • 7. 자바 코드 접근  클래스  인스턴스  생성자  메서드  필드  간편한 문법
  • 8. 자바 코드 접근  클래스  인스턴스  생성자  (def rnd (new java.util.Random))
  • 9. 자바 코드 접근  메서드 (.rnd nextInt 10)  필드 (. Math PI)  간편한 문법
  • 10. 클로저의 속도  자바 가상 머신에서 돌아가는 다른 동적 언어와 달리 „빠르다‟.  배열이나 원시타입(primitives), 타입 힌트 등 으로 자바 컴파일러가 생성한 것과 똑같은 코드를 만들 수 있다.
  • 11. 클로저의 속도  배열  원시타입  타입힌트
  • 12. 클로저의 속도  (make-arry String 5) // 직접선언  (int-array 5) // 원시타입  (to-array [ “AA” “BB” “CC” ]) // 가변길이  (into-array String [ “AA” “BB” “CC” ]) // 명시적타입  (def somestrings (into-array [“some" “string“ “here”])) (seq (amap somestrings idx _ (.toUpperCase (aget strings idx)))) => ( “SOME” “STRING” “HERE” ) // expr이 적용된 배열을 반환한다.  타입을 명시적 선언하면 자바와 똑같은 코드를 만들어 내기 때문에 속도가 빠르다.
  • 13. 클로저의 자바 클래스 생성  자바 코드에서 클로저 코드 호출 가능  클로저에서 실행 중 동적으로 자바 클래스 생성 가능  proxy나 gen-and-save-class를 통해
  • 14. 클로저의 자바 클래스 생성  proxy(프록시)  자바와의 상호작용을 위해 자바 인터페이스를 구현 하는 경우 필요  SAX(Simple API for XML ) 파서를 가지고 XML 파싱 하기가 좋은 예다.  먼저 필요한 클래스를 import 합니다. o (import „(org.xml.sax InputSource) „(org.xml.sax.helpers DefaultHandler) „(java.io StringReader) „(javax.xml.parsers SAXParserFactory))
  • 15. 클로저의 자바 클래스 생성  SAX(Simple API for XML ) 파서를 가지고 XML 파싱 하기  proxy를 이용해 startElement에 대한 모든 호출 내용을 출력하는 DefaultHandler를 생 성하는 예  (def print-element-handler proxy [DefaultHandler] // 수퍼클래스나 구현할 인터페이스들의 벡터 [] // 기본 클래스 생성자에 넘겨질 인자들의 벡터 (startElement // 프록시 메서드구현(Defaulthandler은 하나 가지고 있다) [uri local qname atts] // 네 개의 인자를 받는다, qname 이름을 출력 (println (format “Saw element: %s” qname)))))  만들어짂 핸들러를 파서에 넘겨주자.
  • 16. 클로저의 자바 클래스 생성  SAX(Simple API for XML ) 파서를 가지고 XML 파싱 하기  REPL에서 간단히 문자열로 XML을 파싱하는 함수를 만들자  (defn demo-sax-parse [source handler] (.. SAXParserFactory newinstance newSAXParser (parse (InputSource. (StringReader. source)) handler)))
  • 17. 클로저의 자바 클래스 생성  SAX(Simple API for XML ) 파서를 가지고 XML 파싱 하기  파싱 실행  (demo-sax-parse “<foo> <bar>Body of bar</bar> </foo>” print-element-handler) | Saw element: foo | Saw element: bar  자바의 XML 인터페이스를 다루는 클로저 프록시를 만드는 과정이 간단하다는 것을 보여준다
  • 18. 클로저의 예외 처리  사용이 매우 쉽다  기본 단위는 자바와 완전히 같다.  with-open 같은 상용구를 이용한다.  예외 검사와 자원 관리 등의 번거로운 일을 줄인다.  try와 throw 만으로도 자바의 try,catch,finally,throw를 대체 할 수 있다.  검사되는 예외를 꼭 처리하지 않아도 된다.
  • 19. 클로저의 예외 처리  자바의 예외 처리  try{ newManifest = new Manifest® ; } catch (IOException e) { throw new BuildException(…); }  클로저에서는 검사되는 예외를 처리 하지 않아도 된다.  (Manifest. r)
  • 20. 클로저의 예외 처리  가비지 컬렉션(garbage collection)은 메모리에 있는 자원 해제 한다.  파일 핸들같은 메모리 바깥에 있는 자원은 스스로 해제를 해야 한다.  자바는 보통 finally 부분에서 한다.  해제 자원에 close 메서드가 있다면, 클로저의 with-open 매크로를 이용 할 수 있다.  spit은 문자열을 파일에 쓰는 함수  ex) (clojure.contrib.duck-streams/spit file content) • (use „[clojure.contrib.duck-streams :only (spit)]) (spit “hello.out” “hello, world”)  clojure-contrib에서 spit 함수의 구현 내용  (defn spit [f content] // f에 대한 printWriter 객체 생성 (with-open [#^PrintWriter w (writer f)] // with-open은 writer 닫는 것 보장 (.print w content))) // writer에 대한 content 출력
  • 21. Lancet을 앤트 프로젝트와 테스크에 적용 http://blog.naver.com/hsjhp?Redirect=Log&logNo=10007634263
  • 22. 자바와 같이 일하기  정리  클로저는 자바를 직접 호출 할 수 있다.  자바 클래스를 만들거나 인터페이스 구현 가능  클로저는 실용성을 기초로 한다  자바 코드를 잘 쓰자  하지만 자바 컬렉션 API는 상대적으로 쓰지말자. 시퀀스 라이브러리가 더 강력하고 스레드 세이프하다
  • 23. 끝 http://cafe.naver.com/likecomics.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=5469