Clojure 활용의 핵심! 자바 클래스 사용방법에 대해 정리해보았습니다.
클래스 import
; 풀네임으로 쓰는 방법
java.util.Date ; => java.util.Date
; 줄여서 쓰는 방법
(import java.util.Date)
Date ; => java.util.Date
자동 import
; java.lang 밑에 있는 클래스들은 별도의 import 없이 줄여쓰는 방법으로 쓸 수 있다
Math ; => java.lang.Math
String => java.lang.String
이너(Inner) 클래스 import
; 풀네임으로 쓰는 방법
java.util.Map$Entry ; => java.util.Map$Entry
; 줄여서 쓰는 방법
(import java.util.Map$Entry)
Map$Entry ; => java.util.Map$Entry
인스턴스 생성
; new 구문을 사용
(new java.util.Date)
; 약식 구문
(java.util.Date.)
; 약식 구문 (import 후)
(import java.util.Date)
(Date.)
; 생성자 파라미터 전달하는 경우
(java.net.URI. "http://clojure.org")
인스턴스 메소드 호출
; . 구문을 사용
(let [d (java.util.Date.)]
(. d getTime))
; 약식 구문
(let [d (java.util.Date.)]
(.getTime d))
정적 메소드 호출
; . 구문을 사용
(. Math floor 5.677)
; 약식 구문
(Math/floor 5.677)
연쇄 호출
(.. (java.util.Date.) getTime toString) ; (-> (java.util.Date.) (. getTime) (. toString)) 과 동일
; (-> (java.util.Date.) (.getTime) (.toString)) 과도 동일
동일 오브젝트에 복수 호출
(doto (java.util.Stack.)
(.push 42)
(.push 13)
(.push 7)) ; 첫번째 파라미터의 오브젝트가 나머지 호출의 첫번째 파라미터로 들어간다
; 아래와 같이 써도 동일
(doto (java.util.Stack.)
(. push 42)
(. push 13)
(. push 7))
자바 필드(멤버 변수) 읽기
; . 구문을 사용
(let [pt (java.awt.Point. 10 20)]
(. pt x)) ; pt.x를 읽음
; 약식 구문
(let [pt (java.awt.Point. 10 20)]
(.x pt))
자바 필드(멤버 변수) 쓰기
(let [pt (java.awt.Point. 10 20)]
(set! (.y pt) 100)) ; pt.y -> 100으로 세팅됨
Enum 타입 사용
java.util.concurrent.TimeUnit/MILLISECONDS
상수/인스턴스의 자바 클래스 얻기
(class 1) ; => java.lang.Long
(class "docs") ; => java.lang.String
(class (java.net.URI. "http://github.com")) ; => java.net.URI
클래스명으로 클래스 얻기
(Class/forName "java.util.Date") ; => java.util.Date
참고: http://clojure-doc.org/articles/language/interop.html
<테스트 환경>
- OS : Windows 10
- Leiningen 버전 : 1.0.0