3. 자바를 몰라요 정의가 틀리 고 횡설수설 할 가능성 농후 이해 못해 넘어가는 부분도 다수 발표가 아니라 역으로 가르쳐 주셔야 할지도 .. 그래서 문법보다 정의위주 로 합니다 . 다 읽어 오셔서 아실 꺼라 믿습니다 . 나름 열심히 공부는 했어요 http://cafe.naver.com/happyzzx.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=9700
4. 클로저의 자바 지원은 매우 강력 Lisp 의 표현력 과 자바 에 특화된 편리한 문법 을 동시 에 취할 수 있다는 점에서 강력 하다 . 자바와 자바 라이브러리 를 포용 해서 강력 하다 .
5. 클로저의 자바 지원은 매우 간결 상호 작용에 군더더기가 없어 간결 하다 . 바이트 코드로 컴파일이 되며 별도의 계층을 거치지 않는다 . 자바코드를 LIsp 로 감싸지 않고 바로 접근 할 수 있다 .
6. 클로저의 자바 호출 클래스 , 인스턴스 , 생성자 , 메서드 , 필드 등 어떤 자바 코드 에도 접근할 수 있다 . 간편한 문법 을 제공 자바 코드를 직접 호출하거나 , 자바 API 를 함수형 스타일로 감싸서 사용하는 것도 가능 하다 .
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 합니다 . (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)
21. Lancet 을 앤트 프로젝트와 테스크에 적용 http://blog.naver.com/hsjhp?Redirect=Log&logNo=10007634263
22. 자바와 같이 일하기 정리 클로저는 자바를 직접 호출 할 수 있다 . 자바 클래스를 만들거나 인터페이스 구현 가능 클로저는 실용성 을 기초로 한다 자바 코드를 잘 쓰자 하지만 자바 컬렉션 API 는 상대적으로 쓰지말자 . 시퀀스 라이브러리 가 더 강력하고 스레드 세이프 하다