SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
3. 자바와 사용하기



     아키텍트를 꿈꾸는 사람들
              양창선
Contents
 시작 하며
 장점
 문법
자바를 몰라요
 정의가 틀리고 횡설수설할 가능성 농후
 이해 못해 넘어가는 부분도 다수
 발표가 아니라 역으로 가르쳐 주셔야 할지도..
 그래서 문법보다 정의위주로 합니다.
  다 읽어 오셔서 아실 꺼라 믿습니다.
     나름 열심히 공부는 했어요




                       http://cafe.naver.com/happyzzx.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=9700
클로저의 자바 지원은 매우 강력
 Lisp의 표현력과 자바에 특화된 편리한 문법을
  동시에 취할 수 있다는 점에서 강력하다.
 자바와 자바 라이브러리를 포용 해서 강력하다.
클로저의 자바 지원은 매우 간결
 상호 작용에 군더더기가 없어 간결하다.
 바이트 코드로 컴파일이 되며 별도의 계층을 거
  치지 않는다.
 자바코드를 LIsp로 감싸지 않고 바로 접근 할 수
  있다.
클로저의 자바 호출
 클래스, 인스턴스, 생성자, 메서드, 필드 등
 어떤 자바 코드에도 접근할 수 있다.
  간편한 문법을 제공
 자바 코드를 직접 호출하거나, 자바 API를 함수
 형 스타일로 감싸서 사용하는 것도 가능 하다.
자바 코드 접근
 클래스
 인스턴스
 생성자
 메서드
 필드
 간편한 문법
자바 코드 접근
 클래스
 인스턴스
 생성자


 (def rnd (new java.util.Random))
자바 코드 접근
 메서드   (.rnd nextInt 10)
 필드    (. Math PI)
 간편한 문법
클로저의 속도
 자바 가상 머신에서 돌아가는 다른 동적 언어와
달리 „빠르다‟.
  배열이나 원시타입(primitives), 타입 힌트 등 으로 자바
  컴파일러가 생성한 것과 똑같은 코드를 만들 수 있다.
클로저의 속도
 배열
 원시타입
 타입힌트
클로저의 속도
 (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이 적용된 배열을 반환한다.

    타입을 명시적 선언하면 자바와 똑같은 코드를 만들어 내기 때문에 속도가 빠르다.
클로저의 자바 클래스 생성
 자바 코드에서 클로저 코드 호출 가능
 클로저에서 실행 중 동적으로 자바 클래스 생성
 가능
  proxy나 gen-and-save-class를 통해
클로저의 자바 클래스 생성
 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))
클로저의 자바 클래스 생성
 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)))))


    만들어짂 핸들러를 파서에 넘겨주자.
클로저의 자바 클래스 생성
 SAX(Simple API for XML ) 파서를 가지고 XML 파싱 하기


    REPL에서 간단히 문자열로 XML을 파싱하는 함수를 만들자
        (defn demo-sax-parse [source handler]
          (.. SAXParserFactory newinstance newSAXParser
          (parse (InputSource. (StringReader. source))
          handler)))
클로저의 자바 클래스 생성
 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 인터페이스를 다루는 클로저 프록시를 만드는 과정이 간단하다는 것을
    보여준다
클로저의 예외 처리
 사용이 매우 쉽다
 기본 단위는 자바와 완전히 같다.
 with-open 같은 상용구를 이용한다.
  예외 검사와 자원 관리 등의 번거로운 일을 줄인다.
 try와 throw 만으로도 자바의
  try,catch,finally,throw를 대체 할 수 있다.
 검사되는 예외를 꼭 처리하지 않아도 된다.
클로저의 예외 처리
 자바의 예외 처리
   try{
      newManifest = new Manifest® ;
    } catch (IOException e) {
       throw new BuildException(…);
    }

 클로저에서는 검사되는 예외를 처리 하지 않아도
 된다.
   (Manifest. r)
클로저의 예외 처리
 가비지 컬렉션(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 출력
Lancet을 앤트 프로젝트와 테스크에
적용




       http://blog.naver.com/hsjhp?Redirect=Log&logNo=10007634263
자바와 같이 일하기
 정리
  클로저는 자바를 직접 호출 할 수 있다.
  자바 클래스를 만들거나 인터페이스 구현 가능
  클로저는 실용성을 기초로 한다
    자바 코드를 잘 쓰자
    하지만 자바 컬렉션 API는 상대적으로 쓰지말자.
     시퀀스 라이브러리가 더 강력하고 스레드 세이프하다
끝




http://cafe.naver.com/likecomics.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=5469

Mais conteúdo relacionado

Mais procurados

파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례선협 이
 
공성대전 C# 사용기
공성대전 C# 사용기공성대전 C# 사용기
공성대전 C# 사용기Myoung-gyu Gang
 
[Gpg2권]1.1 c++ 게임의 최적화
[Gpg2권]1.1 c++ 게임의 최적화[Gpg2권]1.1 c++ 게임의 최적화
[Gpg2권]1.1 c++ 게임의 최적화KyeongWon Koo
 
연산자 오버로딩
연산자 오버로딩연산자 오버로딩
연산자 오버로딩. Ruvendix
 
자바스터디 3 2
자바스터디 3 2자바스터디 3 2
자바스터디 3 2jangpd007
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.jsWoo Jin Kim
 
클래스의 추가 지식
클래스의 추가 지식클래스의 추가 지식
클래스의 추가 지식. Ruvendix
 
포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전주항 박
 
Memory & object pooling
Memory & object poolingMemory & object pooling
Memory & object poolingNam Hyeonuk
 
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttpNAVER D2
 
Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기JeongHun Byeon
 

Mais procurados (20)

javascript01
javascript01javascript01
javascript01
 
파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례
 
공성대전 C# 사용기
공성대전 C# 사용기공성대전 C# 사용기
공성대전 C# 사용기
 
[Gpg2권]1.1 c++ 게임의 최적화
[Gpg2권]1.1 c++ 게임의 최적화[Gpg2권]1.1 c++ 게임의 최적화
[Gpg2권]1.1 c++ 게임의 최적화
 
Realm @Android
Realm @Android Realm @Android
Realm @Android
 
Webpack&babel
Webpack&babelWebpack&babel
Webpack&babel
 
Anatomy of Realm
Anatomy of RealmAnatomy of Realm
Anatomy of Realm
 
4-1. javascript
4-1. javascript4-1. javascript
4-1. javascript
 
Javascript 101
Javascript 101Javascript 101
Javascript 101
 
연산자 오버로딩
연산자 오버로딩연산자 오버로딩
연산자 오버로딩
 
ES6 for Node.js Study 2주차
ES6 for Node.js Study 2주차ES6 for Node.js Study 2주차
ES6 for Node.js Study 2주차
 
자바스터디 3 2
자바스터디 3 2자바스터디 3 2
자바스터디 3 2
 
Inheritance
InheritanceInheritance
Inheritance
 
예외 처리
예외 처리예외 처리
예외 처리
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.js
 
클래스의 추가 지식
클래스의 추가 지식클래스의 추가 지식
클래스의 추가 지식
 
포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전
 
Memory & object pooling
Memory & object poolingMemory & object pooling
Memory & object pooling
 
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp
 
Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기
 

Semelhante a Clojure/Chapter3

Java collections framework
Java collections frameworkJava collections framework
Java collections framework경주 전
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Park Jonggun
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)Sung-hoon Ma
 
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
일단 시작하는 코틀린
일단 시작하는 코틀린일단 시작하는 코틀린
일단 시작하는 코틀린Park JoongSoo
 
[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기
[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기
[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기NAVER D2
 
Jdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamicJdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamicknight1128
 
Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015sung yong jung
 
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원탑크리에듀(구로디지털단지역3번출구 2분거리)
 

Semelhante a Clojure/Chapter3 (20)

Java collections framework
Java collections frameworkJava collections framework
Java collections framework
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초
 
Javascript
JavascriptJavascript
Javascript
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
 
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
 
JDK 변천사
JDK 변천사JDK 변천사
JDK 변천사
 
일단 시작하는 코틀린
일단 시작하는 코틀린일단 시작하는 코틀린
일단 시작하는 코틀린
 
5.Spring IoC&DI(DI와 관련된 어노테이션)
5.Spring IoC&DI(DI와 관련된 어노테이션)5.Spring IoC&DI(DI와 관련된 어노테이션)
5.Spring IoC&DI(DI와 관련된 어노테이션)
 
Scala
ScalaScala
Scala
 
[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기
[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기
[D2 campus seminar]스칼라를 통한 다양한 언어의 패러다임 맛보기
 
Jdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamicJdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamic
 
Java(1/4)
Java(1/4)Java(1/4)
Java(1/4)
 
Java_10 람다
Java_10 람다Java_10 람다
Java_10 람다
 
Java lambda
Java lambdaJava lambda
Java lambda
 
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
 
Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015
 
java_1장.pptx
java_1장.pptxjava_1장.pptx
java_1장.pptx
 
[ES6] 6. Class
[ES6] 6. Class[ES6] 6. Class
[ES6] 6. Class
 
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
 
클로저 1
클로저 1클로저 1
클로저 1
 

Clojure/Chapter3

  • 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는 상대적으로 쓰지말자. 시퀀스 라이브러리가 더 강력하고 스레드 세이프하다