-
Notifications
You must be signed in to change notification settings - Fork 1
1. Clojure philosophy
(์ํฐ๋ฆฌ ์์ฝ.. 2014.07.25, joony)
๋์ค์ ์คํฐ๋๊ฐ ๋๋ ๋ ์ฌ๋ฒ์ญํ๋ฉด ์ข์๊ฒ ๊ฐ์ต๋๋ค
ํด๋ก์ ๋ ์๊ณ ํ ์ธ์ด ๋ชจ๋ ํจ๋ฌ๋ค์์ ์ปค๋ฒํ๊ฑฐ๋, ๋ชจ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฒ์ ์๋ ๋์ , ํด๋ก์ ์ ๋ฐฉ์์ผ๋ก ๋ชจ๋ ์ข ๋ฅ์ ์ค์ธ๊ณ์ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๋๋ฐ ํ์ํ ๊ธฐ๋ฅ์ ์ ๊ณต
ํด๋ก์ ์์ ์ ์ผ์ ํํ์ ์ป์ผ๋ ค๋ฉด, ์ธ์ด๊ฐ ๊ฐ์ง ๋น์ ๊ณผ ๋์ผํ ๋น์ ์ ๊ฐ์ง๊ณ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ข์ ๊ธฐ๋ฅ ๋ฟ ์๋๋ผ, ์ ๊ทธ๊ฒ ์ ์ผ ์ข์์ง ์ฑ ๋๋จธ์ง ๋ถ๋ถ์์ ์๊ฒ ๋ ๊ฒ. ๊ทธ์ ์, ๋์ ์์ค์ ์ฒ ํ์ ํ ๋์ ๋ํด ์์๋ด ์๋ค.
Figure 1.1 - ํด๋ก์ ์ ๊ธฐ์ด๊ฐ ๋๋ ์ปจ์ , ๊ทธ๊ฒ๋ค์ด ์ด๋ป๊ฒ ๊ต์ฐจํ๋์ง. ํด๋ก์ ์ ๋ชฉ์ ์ ๋ํด ์์ผ๋ก ๋ค๋ฃฐ ๊ฒ
- ๋ณต์กํ ๋ฌธ์ ์ ๋ํด ๊ฐ๋จํ ํด๊ฒฐ๋ฒ์ ์ฐ๊ธฐ๋ ์ด๋ ต๋ค
- ๊ฒฝํ ๋ง์ ํ๋ก๊ทธ๋๋จธ๋ ํ์์ด์์ผ๋ก ๋ณต์กํ๊ฒ ๋ง๋ ๋ค.(Moseley 2006)
- ํด๋ก์ ๋ ๋ค์ํ ๋ฐ์ดํฐ ์๊ตฌ์ฌํญ,
- ์ฌ๋ฌ๊ฐ์ ๋์ ์ค๋ ๋, ๋ ๋ฆฝ์ ์ธ ๊ฐ๋ฐ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ ๋ถ์์ ์ธ ๋ณต์กํจ์ ์ถ๊ฐํ์ง ์๊ณ , ๋ณต์กํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๊ฒ ๋์์ค
- ์ฒ์ ๋ณด๊ธฐ์ ํ์์ ์ผ๋ก ๋ณต์กํด ๋ณด์ด๋ ๊ฒ๋ ๋ฎ์ถฐ์ค, ํด๋ ์ ๊ณต
- ํด๋ก์ ๋ ๊ฐ๋ ฅํ๊ณ ๋จ์ํ ์ถ์ํ์ ๋ธ๋ก์์ฑ์ด๋ผ๋ ํค ์ธํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํจ (!todo)
- ๊ธฐ๋ฅ๋ค์ ๊ฒฐ๊ณผ ์งํฉ์ด ํญ์ ์ฌ์๋ณด์ด๊ฑฐ๋ ์ต์ํ์ง๋ ์์ ๊ฒ
- ํ์ง๋ง ์ด์ฑ ์ ์ฝ์ผ๋ฉด์, ํด๋ก์ ๊ฐ ๋ณต์กํ ๋ฌธ์ ์ ํด๊ฒฐํ๋๋ฐ ์ผ๋ง๋ ๋์์ ์ฃผ๋์ง ์๊ฒ ๋ ๊ฒ
- ๋ถ์์ ์ธ ๋ณต์กํจ์ ์๋, ํด๋์ค ์ ์, ์์, ํ์ ์ ์ธ์ ๊ณ์ธต์ ํตํด ์คํ๊ฐ๋ฅํ ๋ชจ๋ ์ฝ๋ ์กฐ๊ฐ์ด ํจํค์ง๋๊ธฐ๋ฅผ ์๊ตฌํ๋ ํ๋ ๊ฐ์ฒด์งํฅ์ธ์ด๋ค์ ์ฑํฅ
- ํด๋ก์ ๋ ์ฐ์ํ ์์ ํจ์๋ค์ ํตํด, ์ด ๋ชจ๋ ๊ฒ ์ฌ์ด๋ก ๊ธธ์ ๋ ๋๋ค.
- (todo!)which takes a few arguments and produces a return value based solely on those arguments
- ํด๋ก์ ์ ๊ด๋ํจ์ ํจ์๋ก๋ถํฐ ๋ด์ฅ๋๋ค. ๋ชจ๋ ์์ฉํ๋ก๊ทธ๋จ๋ ๋ง์ฐฌ๊ฐ์ง(?) ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋, ๋ ์๊ฐํ๊ฒ ๋์์ค๋ค.
- ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋๋ก, ํผ๋์ ๋ํ ์ง์์ ์ธ ํฌ์, ๊ทธ๋ฆฌ๊ณ ์ธ์ด๋ ํญ์ ์ฐ๋ฆฌ์๊ฒ ๊ตฌ๋ฌธ, ์ฐ์ฐ์ ์ฐ์ ์์, ์์ก๊ฒ์ธต์ ๋ํด ์๊ฐํ๊ฒ ๋ง๋ฆ -> (๋ฌธ์ ๋ฅผ ์ ํ์ํด)
- ํด๋ก์ ๋ ๊ฐ๋ฅํ๋ฉด ๊ฐ๋จํ๊ฒ ํ๋ ค๋ ์ ์งํ๋ ค๋ ์ฐ๋ฆฌ์ ๋ฐฉ์์ ๋ํด ๊ด์ฌํ์ง ์์ผ๋ ค๊ณ ๋ ธ๋ ฅํ๋ค. ์์ด๋์ด๋ก ๋ถํฐ, ์ปดํ์ผํ๊ณ ์คํํ๋ ์ฌ์ดํด์ ์๊ตฌํ์ง ์๋๋ค. ํ์ ์ ์ธ์ ํ๋ ๊ฒ์ ์๊ตฌํ์ง ์๋๋ค.
- ๋งคํฌ๋ก / ์ธ์ด ์ค์ค๋ก๋ฅผ ์ ๋ฆฝํ ์์๋(?) ํด์ ์ ๊ณตํ๋ค. ๊ทธ๋์ ๋จ์ด,๋ฌธ๋ฒ์ด ๊ฐ๋ฅํ ์ฐ๋ฆฌ ๋ฌธ์ ์ ๋ง๊ฒ.
- ํด๋ก์ ธ๋ ํ๋ถํจ
- ์ดํดํ๋๋ฐ์ (๋ ธ๋ ฅํ๋)ํฌ์ ์์ด, ๊ณ ์ฐจ์์ ๋ฌธ์ ๋ค์ ๊ฐ๋จํ๊ฒ..
- ์ด ์์ ๋ฅผ ์ ๋ฌํ๋ ํ๋์ ํค๋ ๋์ ์์คํ ์ ๋ํ ์ฝ์
- ์ฌ์ง์ด ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์์๋ ํด๋ก์ ์์ ์ ์๋ ๋ชจ๋ ๊ฒ์ ๋ชจ๋ ์ฌ์ ์ ๊ฐ๋ฅ.: ํจ์, multimethods, ํ์ , ํ์ ๊ณ์ธต, ์ฌ์ง์ด ์๋ฐ ๋ฉ์๋ ๊ตฌํ.
- ์์ฐ๋ ์์คํ ์์์ ๊ทธ๋ ๊ทธ๋, ์ฌ์ ์ํ๋ ๊ฒ์ด ๋ฌด์์ธ ์๋ ์์ง๋ง, ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ฉด์ ์๊ฐํ๋ ๊ฒ์ ๋๋ผ์ด ๊ฐ๋ฅ์ฑ์ ์ธ๊ณ๊ฐ ํผ์ณ์ง
- ์น์ํ์ง ์์ API์ ๋ํด ๋ ๋ง์ ์คํ๊ณผ ํ๊ตฌ๋ฅผ ํ์ฉ
- and it adds an element of fun that can sometimes be impeded by more static languages and long compilation cycles.
- ํ์ง๋ง, ํด๋ก์ ๋ ๊ทธ๋ฅ ์ฌ๋ฏธ๋ง ์ถ๊ตฌํ๋ ๊ฒ์ ์๋๋ค.์ฌ๋ฏธ์๋๊ฑด ํ๋ก๊ทธ๋๋จธ์๊ฒ ์ด์ ๊น์ง ์์ํ๋ ๊ฒ๋ณด๋ค ์์ฐ์ ์ด๊ฒ ํ๋ ํ์ ์ค์ผ๋ก์จ ์๊ธฐ๋ ๋ถ์ฐ๋ฌผ์ด๋ค.
- ์ผ๋ถ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ํ๊ณ์ ํน์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋๋ ์ ์ฐ์ ํน์ ์ด๋ก ์ ํ๊ตฌํ๊ธฐ ์ํด ์ฃผ๋ก ๋ง๋ค์ด์ก๋ค.
- ํด๋ก์ ๋ ๊ทธ๋ฐ ๋ถ๋ฅ๋ ์๋๋ค.
- Rich Hickey- ํด๋ก์ ๋ ์ฌ๋ฏธ์๊ณ , ์ ์ฉํ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๊ฒํ๋ค๊ณ ๋ง์ด ๋งํด์๋ค.
- ์ด ๋ชฉํ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด, ํด๋ก์ ๋ ์์ ์ด ์ด๋ฃจ์ด์ง๊ธฐ ์ํ ์ค์ฉ์ ํด์ด๋๋ ค ๋ ธ๋ ฅํ๋ค.
If a decision about some design point in Clojure had to weigh the trade-offs between the practical solution and a clever, fancy, or theoretically pure solution, usually the practical solution won out.
- ํ๋ก๊ทธ๋๋จธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฌ์ด์์ ์ดํด๊ฐ๋ฅํ API๋ฅผ ์ฝ์ ํจ์ผ๋ก์จ ์๋ฐ๋ก ๋ถํฐ ๋ณดํธ(๋ณด์ฅ)ํด์ฃผ๋ ค ๋ ธ๋ ฅํจ.
- ํ์ง๋ง ์ด๊ฒ์ ๋ถํธํ๊ฒ ์๋ํํฐ ์๋ฐ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฒ ํจ
- ๊ทธ๋์ ํด๋ก์ ๋ ๋ค๋ฅธ ๊ธธ์ ๊ฐ๋ค. : direct, wrapper-free, ์๋ฐ์ ํด๋์ค์ ๋ฉ์๋์ ๋ํด ๊ฐ์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ปดํ์ผ.
- ํด๋ก์ ์ ์คํธ๋ง์ ์๋ฐ์ ์คํธ๋ง์ด๊ณ ,ํด๋ก์ ์คํฌ๋ฆฝํธ์ ์คํธ๋ง์ ์๋ฐ์คํฌ๋ฆฝํธ ์คํธ๋ง์ด๋ค.
- ํด๋ก์ ์ ํด๋ก์ ์คํฌ๋ฆฝํธ์ ํจ์ ํธ์ถ์ ์์์ ๋ฉ์๋ ํธ์ถ์ด๋ค
- ์ด๊ฒ์ ๊ฐ๋จํ๊ณ ์ง์ ์ ์ด๊ณ ,์ค์ฉ์ ์ด๋ค.
- Java ๊ฐ์๋จธ์ ์ (JVM)์ฌ์ฉํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ๋์์ผ๋ก ํ๋ ๊ฒฐ์ ์ ์ค์ฉ์ฑ์ ๋ช ํํ ์์ด๋ค.
- ์๋ฅผ ๋ค์ด JVM์ ๋๋๊ฒ ์ค์ฉ์ ์ธ ํ๋ซํผ์ด๋ค
- ์ฑ์ํ๊ณ ๋น ๋ฅด๊ณ ๋๋ฆฌ ๋ฐฐํฌ๋๋ค.
- ๋ค์ํ ํ๋์จ์ด์ OS๋ฅผ ์ง์ํ๊ณ , ๋ง๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ง๋ค. ํด๋ก์ ๋ ์์๋ฅผ ์ด์๋ง์ ๋ฐ๋ก ํ์ฉ ๊ฐ๋ฅํ ์ฅ์ ์ ๋ค ๊ฐ๋๋ฏ?
- ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋์์ผ๋ก ํ๋ ํด๋ก์ ์คํฌ๋ฆฝํธ๋ ๋ธ๋ผ์ฐ์ , ์๋ฒ, ๋ชจ๋ฐ์ผ ๋๋ฐ์ด์ค, db ์ฒ๋ฆฌ ์คํฌ๋ฆฝํธ๊น์ง..์ ๋น์ฟผํฐ์ค์ ๊ฐ๊น์ด ์ฅ์ ์ ๊ฐ๋๋ค.
- ์ง์ ๋ฉ์๋๋ฅผ ํธ์ถ, ํ๋ก์, gen-class, gen-interface, ๊ตฌ์ฒดํ,reify, definterface, deftype, and defrecord (see section 9.3)..์ ํจ๊ป, ํด๋ก์ ๋ ๋ง๋ํ ์ํธ ์ด์ฉ์ ์ต์ ์ ์ ๊ณตํ๊ธฐ ์ํด ๋นก์ธ๊ฒ ์ผํ๋ค. ๋์ ์์ ์ ๋๋ด๊ธฐ ํ๋ ค ๋์์ ์ฃผ๊ธฐ์ํด.
- ์ค์ฉ์ ์ธ ๊ฒ์ ํด๋ก์ ์์ ์ค์ํ์ง๋ง, ๋ค๋ฅธ๋ง์ ์ธ์ด๋ค๋ ์ค์ฉ์ ์ด๋ค.
- ๋ค์ฃฝ๋ฐ์ฃฝ์ ํผํ๋ฅ..
๋๋ฉ์ธ ํน์ฑ์ ์ธ ์ธ์ด๊ฐ ์๋๋ผ ๊ฐ๋ ฅํ ์ธ์ด.
When beetles battle beetles in a puddle paddle battle and the beetle battle puddle is a puddle in a bottle ... they call this a tweetle beetle bottle puddle paddle battle muddle. โDr. Seuss2
python์ฝ๋
# This is Python code
x = [5]
process(x)
x[0] = x[0] + 1
์ด์ฝ๋๋ฅผ ์คํํ ํ x์ ๊ฐ์? process๊ฐ x์ ๊ฐ์ ๋ณ๊ฒฝํ์ง ์๋๋ค๊ณ ๊ฐ์ ํ๋ฉด, ์ด๊ฒ์ 6์ด๋ค. ํ์ง๋ง ์ด๋ป๊ฒ ๊ทธ๋ฐ๊ฐ์ ์ ํ ๊น? process๊ฐ ๋ฌด์์ํ ์ง ์ ํํ ์์ง ์๊ณ ์๋, ์ ํจ์๊ฐ ๋ถ๋ ธ์ ๋ ํ์ ํ ์ ์๋ค.
์ฌ์ง์ด process๊ฐ x์ ๊ฐ์ ๋ฐ๊พธ์ง ์๋๋ค๊ณ ํ์ ํ๋คํ๋๋ผ๋, ๋ฉํฐ์ค๋ ๋ฉ์ ์ถ๊ฐํ๋ฉด ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ๋ง๋๋ค. ์ผ๋ถ ๋ค๋ฅธ ์ฐ๋ ๋๊ฐ ์ฒซ์งธ์ค๊ณผ ์ ์งธ์ค ์ฌ์ด์์ x๊ฐ์ ๋ฐ๊พผ๋ค๋ฉด? ์์ง ๋์์ง ์์ง๋ง, ์ธ๋ฒ์งธ ๋ผ์ธ์ด ์คํ๋๋ ์ค์ ๋ฌด์ธ๊ฐ๊ฐ x๊ฐ์ ์ ํ๋ค๋ฉด ํ๋ซํผ์ด atomicํ๊ฒ ๋ณ์์ ๊ฐ์ ์ฐ๋ ๊ฒ์ ๋ณด์ฅํ๋ ๊ฒ์ ํ์ ํ ์ ์๋? ๋๋ ๋ค์ค ์ฐ๊ธฐ๋ก ์๋๊ฒ์ด (?) ๊ฐ๋ฅํ๊ฐ ์ฐ๋ฆฌ๋ ๋ช ํ์ฑ์ ์ป๊ธฐ์ํ ํฌ๋งํ๋ฉฐ ์๊ฐ์ ์ง์ํ ์ ์๋ค. ํ์ง๋ง, ๋ช ๋ฃํด์ง์ ์๋ค๋ ๊ฒฐ๋ก ์ ๊ฐ์ ๊ฒ์ด๋ค.
ํด๋ก์ ๋ ์๋ง์ ๋ค๋ฅธ ์ข ๋ฅ์ ๋ณต์กํจ์ ํผํ๋ ํด์ ์ ๊ณตํจ์ผ๋ก์จ ์ฝ๋์ ๋ช ๋ฃ์ฑ์ ์ํด ๋ ธ๋ ฅํจ ๋ฐฉ๊ธ ์ฝ๋์ ๊ฒฝ์ฐ๋, ๋ฐ๊ฟ์ ์๊ณ ์ง์๊ฐ๋ฅํ ์ฝ๋ ์ ์ ์ ๊ณตํด์ ์ฑ๊ธ&๋ฉํฐ ์ค๋ ๋ ์ด์๋ฅผ ์์ฐ ์ฌ์ฉํ๋ ์ธ์ด๊ฐ ์๋ก๋ค๋ฅธ ํ์๋ค์ ํ๋์ ๊ตฌ์กฐ์ฒด์์ ํฉ์น ๋,์ฐ๋ฆฌ๋ ๋ค๋ฅธ ๋ณต์กํ ๊ฒ๋ค๋ ์ฐพ์ ์ ์๋ค. ํด๋ก์ ๋ concern ๋ถ๋ฆฌ์ ๋ํ ๊ฒฝ๊ณ๋ฅผ ๋ฆ์ถ์ง ์๊ณ ์ด์ ๋ํญํ๋ค.
When things start off separated, it clarifies your thinking and allows you to recombine them only when and to the extent that doing so is useful for a particular problem.
ํ 1.1์ ๋ด ์๋ค!
AOP
(Aspect Oriented Programming: AOP) : ๊ด์ ๋ถ๋ฆฌ ํก๋จ ๊ด์ฌ์ฌ cross cutting concern / ํก์ ์ฝ๋ฉ ๊ณตํต๊ดด๋ ๊ฑด ํจ์๋ก ๋บ์ ์์ง ์ถ์ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ๋์์ ๋บ.
ํฉ์ณ์ง | ๋ถ๋ฆฌ๋ ๋ณ๊ฒฝ๊ฐ๋ฅํ ํ๋๋ฅผ ๊ฐ์ง ์ค๋ธ์ ํธ | ๋์ผํ ๊ฐ ๋ฉ์๋๋ฅผ ์ํ ๋ค์์คํ์ด์ค๋ก ํํ๋ ํด๋์ค
์์ฑ, ๊ธฐ๋ฅ์ ๋ํ๊ฑฐ์ด ์๋๋ผ ์ข๋ ๋ถ๋ฆฌ
ํด๋ก์ ๋ ์ผ๊ด์ฑ์ ์ ๊ณตํ๊ธฐ์ํด ๋๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๋์ํ๋ค. - ์ ํ์ค์ ๋ฐ์ดํฐ ๊ตฌ์กฐ
์ ํ์ค์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ผ๊ด์ฑ : Clojure์ ๋ ๊ฐ์ง ๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ์ ์ผ๊ด์ฑ์ ์ ๊ณตํ๋๋ก ์๋ํ๋ค. ๊ตฌ๋ฌธ์ ์ผ๊ด์ฑ ๊ด๋ จ ๊ฐ๋ ์ฌ์ด์ ํํ์ ์ ์ฌ์ฑ์ โโ๊ดํ ๊ฒ์ ๋๋ค. ์ด ์ค ํ๋๋ ๊ฐ๋จํ์ง๋ง ๊ฐ๋ ฅํ ์์ ๋ฐ doseq ๋งคํฌ๋ก์ ๊ณต์ ๊ตฌ๋ฌธ์ ๋๋ค. doseq ์ฌ์ด๋ ์์ฑํ๋ ๋ฐ๋ฉด, ๊ทธ๋ค์ ๊ฐ์ ์ผ์์ํ ๋ฐํ ๊ฒ์ผ๋ฅธ ์์ด์ํ์ง ์๋ ํจ๊ณผ๋ฅผ -ํ์ง๋ง ๋ชจ๋ ์ค์ฒฉ ITERA - ๊ธฐ, destructuring ๊ฐ์ ๋ฏธ๋ ์ธ์ด๋ฅผ ์ง์ํ๊ณ : ์ธ์ : ๊ฒฝ๋น์์๋ค. Clojure์ ์ฝ๋์ ๋ค์ ์๋ฅผ ๋น๊ตํ๋ฉด ์ ์ฌ์ ์ด ๋์ ๋๋. ๊ฐ ์์ ๋ ํค์๋ ๋๋ B ์ค ํ๋, 5๋ณด๋ค ์์ ์์ ํ์์ ์ ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฑ ๊ฐ๋ฅํ ๋ชจ๋ ์์ ๋ณด์ฌ์ค๋๋ค ์ฒซ ๋ฒ์งธ ์๋ ์ดํด๋ฅผ ์ํด๋ก ์๋ ค์ง ๊ฒ์ ์ฌ์ฉํ๊ณ ์์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ฐํํฉ๋๋ค. : ย ย ย ย ย ย ย ย (์ฉ [X์ [A : B], Y (๋ฒ์ 5) : (ํ์ Y)] ย ย ย ย ย ย ย ย ย ย [X, Y]) ย ย ย ย ย ย ย ย ;; => ([: 1] [: 3] [: B 1] [: B 3])
๋ ๋ฒ์งธ ์๋ ์์ ์ธ์ ํ doseq๋ฅผ ์ฌ์ฉ (doseq [X์ [A : B], Y (๋ฒ์ 5) :์ (ํ์ Y)] ย ย (PRN์ x ๋ฐ y)) ; : 1 ; : 3 ; : B 1 ; : B 3 ;; => ์ ๋ฌด ์ด ์ ์ฌ์ฑ์ ๊ฐ์ ํ๋์ ๊ธฐ๋ณธ์ ์ธ ๋ ๊ฒฝ์ฐ ๋ชจ๋์ ๋ํ ๊ตฌ๋ฌธ๋ฟ๋ง ์๋๋ผ, ํ์ํ ๊ฒฝ์ฐ ๋ค๋ฅธ ํ ํํ์ ํน์ ์ฌ์ฉ์ ๋ณํ ํ ์์๋ ์ฉ์ด์ฑ์ ๋ฐฐ์ธ ํ์๊ฐ์๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ผ๊ด์ฑ์ ๊ฐ๋ฅํ ํ ์๋ก ๋น์ทํ๋ฟ๋ง๋งํผ ๊ด๋ฒ์ํ๊ฒ ์ ์ฉ ๊ฐ๋ฅํ ๊ทธ๋ค์ ๋ง๋ค๊ธฐ ์ํด ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์ง์์ ์ผ๋ก Clojure์ ์ปฌ๋ ์ ์ ํ ๋ชจ๋์ ์๋์ ์ธ ๋์์ธ์ด๋ค. ์ด๊ฒ์ ๊ณ ์ ๋ฆฌ์คํ์ ํ์ฅ ์ฒ ํ "์ฝ๋๊ฐ ๋ฐ์ดํฐ์ ๋๋ค"์ ๋๋ค. Clojure์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ๋จ์ง ์ดํ๋ฆฌ์ผ์ด์ ๋ฐ์ดํฐ์ ๋ง์ ์์ ์ ์งํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ฒ์ด ์๋๋ผ ์ดํ๋ฆฌ์ผ์ด์ ์์ฒด์ ํํ ์์๋ฅผ ์ ์งํ๋๋ก. ๊ทธ๋ค์ destructuring ์์์ ์ค๋ช ํ๋ ๋ค์ํ ๋ด์ฅ ํจ์๋ผ๋ ์ต์ ์ ์ ๊ณตํ๋ ๋ฐ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋ค๋ฅธ ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ ํ๊ธฐ ์ํด ์ฌ๋ฌ ํธํ๋์ง ์๋ ํด๋์ค๋ฅผ ์ ์ํ๊ธฐ ์ํด ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ถ์ฅ ์ ์์ต๋๋ค ๊ฒฝ์ฐ, Clojure์ ํธํ์ง๋์ ๊ฐ์ ๊ฐ์ฒด์ ์ฌ์ฉ์ ๊ถ์ฅํฉ๋๋ค. ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ, ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ์ดํฐ ์ค๋ธ์ ํธ : ์ด๊ฒ์ ์ด์ ์ Clojure์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ํจ๊ป ์๋ํ๋๋ก ์ค๊ณ๋ ํจ์์ ๋์ผํ ์ธํธ๊ฐ ๋ชจ๋ ์ํฉ์ ์ ์ฉ ํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ๋น์ ์์ด ์์ ์์๋ isfy ๊ทธ ํน์ ์กฐ๊ฑด์ ๊ทธ ์ค ํ๋์ ์์๋ฅผ ์ ํํ๋ ๊ทธ๋ค์ ํตํด ๋๋ณด๋ก ๊ฒ์ผ๋ฅธ ์์ด, ํํฐ๋ฅผ ์ป๊ธฐ ์ํด ์ด๋ฌํ ์ ํ์ ์์ด์ ๊ตฌ์ถํ๊ธฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋น์ ์ ์ด๋์์๋ ์ฌ์ฉํ ์์๋ ๋ชจ๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ ํ์ ๋ก์์ ๊ฐ๋ Java ๋๋ C + + ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ธ ๋๋ ์ฃผ์ ํด๋์ค ์ฒ๋ฆฌ์ ์ต์ํด ์ ธ ์ผ๋จ ๊ตฌ์ ๋๋ ๊ฒ์ด๋ค. ๋จ์์ฑ, ์ด์ ์์ , ๊ถํ ๋ถ์ฌ, ์ผ๊ด์ฑ, ๊ทธ๋ฆฌ๊ณ Clojure์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ช ํ์ฑ - ๊ฑฐ์ ๋ชจ๋ ์์๋ ์ด๋ฌํ ๋ชฉํ๋ฅผ ์ด์งํ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค. Clojure์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ ๋น์ ์ด ์ผ๋์ ๋จ์, ๊ถํ ๋ถ์ฌ, ์์ ์ง์ง ๋ฌธ์ ์ ์ด์ ์ ๋ง์ถ ์์๋ ์์ ๋ฅผ ๊ทน๋ํํ๋ ์๋ง์ ์ ์งํ๋ ๊ฒฝ์ฐ์, ์ฐ๋ฆฌ๋ ๋น์ ์ด Clojure์ ๋น์ ์๊ฒ ๋น์ ์ด ์ฑ๊ณตํ๋ ๋ฐ ํ์ํ ๋๊ตฌ๋ฅผ ์ ๊ณต ์ฐพ์ ์ ์์ต๋๋ค ์๊ฐํฉ๋๋ค.