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

 

,