์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
1. ๊ฐ์[ํธ์ง]
๊ณต์ ํํ์ด์ง
Rich Hickey์ ์ํด ์ฐฝ์๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก, LISP์ ๋ฐฉ์ธ์ด๋ค. JVM, .NET Framework, JavaScript๋ฅผ ๋์์ผ๋ก ์ปดํ์ผ๋๋ค. Java์์ ์ํธ ํธํ์ด ๊ฐ๋ฅํ๋ค.
๊ฐ๋ฐ ๋๊ตฌ๋ ๋๋ถ๋ถ Emacs๋ฅผ ์ฌ์ฉํ๋ค. IDE๋ก๋ IntelliJ IDEA์ฉ ํ๋ฌ๊ทธ์ธ์ผ๋ก ๊ฐ๋ฐ๋ Cursive(์ ๋ฃ)๊ฐ ์กด์ฌํ๋ค.[1]
Rich Hickey์ ์ํด ์ฐฝ์๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก, LISP์ ๋ฐฉ์ธ์ด๋ค. JVM, .NET Framework, JavaScript๋ฅผ ๋์์ผ๋ก ์ปดํ์ผ๋๋ค. Java์์ ์ํธ ํธํ์ด ๊ฐ๋ฅํ๋ค.
๊ฐ๋ฐ ๋๊ตฌ๋ ๋๋ถ๋ถ Emacs๋ฅผ ์ฌ์ฉํ๋ค. IDE๋ก๋ IntelliJ IDEA์ฉ ํ๋ฌ๊ทธ์ธ์ผ๋ก ๊ฐ๋ฐ๋ Cursive(์ ๋ฃ)๊ฐ ์กด์ฌํ๋ค.[1]
2. ํน์ง[ํธ์ง]
๊ณต์ ํํ์ด์ง์์ ์๊ฐํ๋ ๋ํ ํน์ง ๋ชฉ๋ก ์์๋ Dynamic Programming(REPL), Functional Programming, LISP(์ ๋ฐฉ์ธ์), Runtime Polymorphism, Concurrent Programming, Hosted on JVM์ ๋ํ ํน์ง์ผ๋ก ๊ผฝ๊ณ ์๋ค.
2.1. REPL[ํธ์ง]
REPL(Read-Eval-Print-Loop)์ ์ฝ์๋ก, ์ปดํ์ผ๋๋ ์ธ์ด์ด์ง๋ง ์คํฌ๋ฆฝํธ ์ธ์ด(์๋ฅผ ๋ค์ด JavaScript) ํ๊ฒฝ์ฒ๋ผ ์ง์ ๋ช
๋ น๋ฌธ์ ์
๋ ฅํ๋ฉด์ ํ
์คํธํ ์ ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค.
2.2. ํจ์ํ ํ๋ก๊ทธ๋๋ฐ[ํธ์ง]
2.3. LISP์ ๋ฐฉ์ธ[ํธ์ง]
2.4. ๋ฐํ์ ๋คํ์ฑ[ํธ์ง]
Runtime Polymorphism
2.5. ๋ณํ ํ๋ก๊ทธ๋๋ฐ[ํธ์ง]
Concurrent Programming
2.6. ์๋ฐ ๊ฐ์๋จธ์ ๊ธฐ๋ฐ์ ์คํ[ํธ์ง]
3. ํ์ ํ๋ก์ ํธ[ํธ์ง]
JVM ํ๊ฒฝ์์ ์คํ๋๋ Clojure๋ฅผ ํ๋๋ก ๋ค๋ฅธ ํ๊ฒฝ์์์ ์คํ์ ์ํ ๊ณต์ ํ๋ก์ ํธ๊ฐ ์กด์ฌํ๋ค.
3.1. ClojureScript[ํธ์ง]
ClojureScript Github ํ์ด์ง Clojure ํ๋ก๊ทธ๋จ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ปดํ์ผํด ์ฃผ๋ ํธ๋์ค์ปดํ์ผ๋ฌ.
3.2. ClojureCLR[ํธ์ง]
ClojureCLR Github ์ฌ์ดํธ Java๊ฐ ์๋ .NET์ CLR(Common Language Runtime) ํ๊ฒฝ์์ ์คํํ๊ธฐ ์ํ Clojure ๊ตฌํ์ฒด.
4. ๋์[ํธ์ง]
Programming Clojure
ํ์ฌ๊น์ง (๊ตญ๋ด์) ๋์จ ๋์๋ค ์ค์ ๊ฐ์ฅ ํ๋ฅญํ๋ค. ๊ทธ๋ฌ๋ ์ถํ๋ ๋๊ฐ 2009๋ ์ธ๋งํผ ํ์ฌ ๋ฒ์ ์์ "contrib" ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ฌ์ฉ๋ฒ์ด ๋ง์ง ์๋ค.
Living Clojure
๋น ๋ฅด๊ฒ ๋ฐ๋ก ์จ๋จน์ ์ ์๋ ํํ๋ก ์ถ์ฒํ๋ค. ๋ํ 10์ฅ์ ์ฐ์ต ๋ฌธ์ ๋ค๋ ์ค๋ฌด์์ ๋์์ด ๋๋ ๋ด์ฉ์ด๋ค.
ํ์ฌ๊น์ง (๊ตญ๋ด์) ๋์จ ๋์๋ค ์ค์ ๊ฐ์ฅ ํ๋ฅญํ๋ค. ๊ทธ๋ฌ๋ ์ถํ๋ ๋๊ฐ 2009๋ ์ธ๋งํผ ํ์ฌ ๋ฒ์ ์์ "contrib" ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ฌ์ฉ๋ฒ์ด ๋ง์ง ์๋ค.
Living Clojure
๋น ๋ฅด๊ฒ ๋ฐ๋ก ์จ๋จน์ ์ ์๋ ํํ๋ก ์ถ์ฒํ๋ค. ๋ํ 10์ฅ์ ์ฐ์ต ๋ฌธ์ ๋ค๋ ์ค๋ฌด์์ ๋์์ด ๋๋ ๋ด์ฉ์ด๋ค.
[1] ๋ฌด๋ฃ๋ก ์ ๊ณต๋๋ Non-Commercial ๋ผ์ด์ผ์ค๋ ์์ง๋ง ๋์ 6๊ฐ์๋ง๋ค ๊ณ์ ๊ฐฑ์ ํด์ค์ผ ํ๋ค.