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
'1. 연구 모듈 > Lisp - Clojure' 카테고리의 다른 글
[Clojure/Lisp] Clojure에서 println 어렵게 해보기 (0) | 2022.03.28 |
---|---|
[Clojure/Lisp] Clojure 맵에서 키워드를 키로 활용 (0) | 2021.12.07 |
[Lisp/Clojure] Clojure에서 "->" 매크로 사용 (0) | 2020.12.18 |
[Lisp/Clojure] 아무 Clojure 실행방법 대잔치 (0) | 2018.04.13 |
[Lisp/Clojure] HTTP 파싱하기 (enlive 모듈 사용) (0) | 2017.09.14 |