์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
1. ๊ฐœ์š”2. ํŠน์ง•
2.1. ์ •์  ํƒ€์ž… ์‹œ์Šคํ…œ2.2. ํ•จ์ˆ˜ํ˜• ์–ธ์–ด2.3. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜2.4. OPAM
3. ์ ์œ ์œจ4. ๊ธฐํƒ€

1. ๊ฐœ์š”[ํŽธ์ง‘]

OCaml ์€ ํ”„๋ž‘์Šค์˜ Inria์—์„œ ML ๊ณ„์—ด ์–ธ์–ด์ธ Caml์— ๊ฐ์ฒด์ง€ํ–ฅ, ๋ชจ๋“ˆ ์‹œ์Šคํ…œ ๋“ฑ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋งŒ๋“  ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋‹ค. ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ๋ช…๋ นํ˜• ๊ธฐ๋Šฅ๋„ ์ง€์›ํ•œ๋‹ค.

2. ํŠน์ง•[ํŽธ์ง‘]

2.1. ์ •์  ํƒ€์ž… ์‹œ์Šคํ…œ[ํŽธ์ง‘]

OCaml์€ Lisp์ด๋‚˜ Scheme, Racket, Clojure์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์ •์  ํƒ€์ž… ์‹œ์Šคํ…œ์„ ์žฅ์ฐฉํ•œ ํ•จ์ˆ˜ํ˜• ์–ธ์–ด์ด๋‹ค. ๊ฐ•๋ ฅํ•œ ํƒ€์ž… ์ถ”๋ก  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ๋ชจ๋“  ํƒ€์ž… ์—๋Ÿฌ๋ฅผ ๋ฏธ์—ฐ์— ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํƒ€์ž…์„ ์ ์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ํƒ€์ž…์„ ์ถ”๋ก ํ•ด์ค€๋‹ค.

2.2. ํ•จ์ˆ˜ํ˜• ์–ธ์–ด[ํŽธ์ง‘]

OCaml์€ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋‹ค. ํ•จ์ˆ˜ํ˜•์ด ๋ฌด์—‡์ธ๊ฐ€์— ๋Œ€ํ•ด์„œ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ •์˜๊ฐ€ ์žˆ์ง€๋งŒ, ๊ธฐ๋ณธ์ ์œผ๋กœ 1) ํ•จ์ˆ˜๋ฅผ ๋ฐ์ดํ„ฐ์ฒ˜๋Ÿผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์œผ๋ฉฐ 2) ๊ธฐ๋ณธ์ ์ธ ๋ณ€์ˆ˜(variable)๊ฐ€ ๋ถˆ๋ณ€์ธ ๊ฒƒ์„ ๋œปํ•œ๋‹ค. [1]

2.3. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜[ํŽธ์ง‘]

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํ•ด์ฃผ๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•˜๋ฉด OCaml ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ์™ธ์—๋„ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ง€์›ํ•ด์„œ 9 ์ข…๋ฅ˜์˜ ์•„ํ‚คํ…์ณ์— ๋งž๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์‹คํ–‰ ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

2.4. OPAM[ํŽธ์ง‘]

์ž์ฒด์ ์ธ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋กœ OPAM์ด๋ผ๋Š” ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•œ๋‹ค. ํŠน์ดํ•˜๊ฒŒ๋„ Java๋‚˜ ์—ฌํƒ€ ์–ธ์–ด์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์–ธ์–ด ๋ฒ„์ „ ๊ฐ„์˜ ํ˜ธํ™˜์„ฑ์€ ๋ฒ„๋ฆฌ๊ณ , ์–ธ์–ด ๋ฒ„์ „ ๊ฐ„์˜ ์ปดํŒŒ์ผ๋Ÿฌ ํ™˜๊ฒฝ์„ ์ž์œ ๋กญ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š”(switch) ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

3. ์ ์œ ์œจ[ํŽธ์ง‘]

์ ์œ ์œจ์€.. ์ฒ˜์ฐธํ•˜๋‹ค. ๊นƒํ—ˆ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ ์œ ์œจ์„ ๋ณด๋ฉด 38์œ„๋กœ ๋น„์Šทํ•œ ๊ณ„์—ด์˜ ์–ธ์–ด์ธ ์Šค์นผ๋ผ๋‚˜ ํ•˜์Šค์ผˆ๋ณด๋‹ค๋„ ๋‚ฎ์€ ์ ์œ ์œจ์„ ๋ณด์—ฌ์ค€๋‹ค.ํ•˜์ง€๋งŒ OCaml์„ ๋ณธ๋”ฐ ๋งŒ๋“  MicroSoft์˜ F#์€ ์ด๊ฒผ๋‹ค
OCaml์„ ํ”„๋กœ์ ํŠธ์˜ ์ฃผ์š” ์–ธ์–ด๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ๊ธฐ์—…์€ ๋ฏธ๊ตญ์˜ ์–‘์  ๊ฑฐ๋ž˜(quantitative trading) ํšŒ์‚ฌ์ธ ์ œ์ธ ์ŠคํŠธ๋ฆฌํŠธ๊ฐ€ ๊ฐ€์žฅ ์œ ๋ช…ํ–ˆ๋‹ค.
์ตœ๊ทผ์—๋Š” ํŽ˜์ด์Šค๋ถ์—์„œ OCaml์„ ๊ฐ€์ ธ๋‹ค๊ฐ€ Reason์ด๋ผ๋Š” ์–ธ์–ด๋ฅผ ๋งŒ๋“ค๊ธฐ๋„ ํ–ˆ์œผ๋ฉฐ, OCaml๊ณผ Reason์„ ์ด์šฉํ•˜์—ฌ ์ •์  ์ฝ”๋“œ ๋ถ„์„๊ธฐ์ธ Infer๋ฅผ ๋งŒ๋“ค๊ธฐ๋„ ํ–ˆ๋‹ค. ํŽ˜์ด์Šค๋ถ๊ณผ ๊ฐ™์€ ๊ฑฐ๋Œ€ IT ๊ธฐ์—…์—์„œ OCaml์— ๊ด€์‹ฌ์„ ๊ฐ–๊ณ  ์ฃผ์š” ํ”„๋กœ์ ํŠธ์˜ ์–ธ์–ด๋กœ ์ฑ„ํƒํ–ˆ๋‹ค๋Š” ์ ์—์„œ ๋งŽ์€(?) OCaml ์‚ฌ์šฉ์ž๋“ค์ด ์ ์  ๋„๋ฆฌ ์“ฐ์ผ ๊ฑฐ๋ผ๋Š” ๊ธฐ๋Œ€๋ฅผ ํ’ˆ์ง€๋งŒ, ํ˜„์‹ค์€...

4. ๊ธฐํƒ€[ํŽธ์ง‘]

ํฌํ•ญ๊ณต๊ณผ๋Œ€ํ•™๊ต์—์„œ๋Š” ํ•œ๋•Œ(08~10๋…„๋„) ์ด๊ฑธ ๋ชจ๋“  ํ•™๋ถ€์ƒ์ด ๋“ค์–ด์•ผ ํ•˜๋Š” ํ•™๋ถ€ 1ํ•™๋…„์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณผ๋ชฉ์—์„œ ๊ฐ€๋ฅด์นœ ์ „์ ์ด ์žˆ๋‹ค(...) ํ•จ์ˆ˜ํ˜• ์–ธ์–ด์ด๊ณ  ๋‚œ์ด๋„๋„ ์–ด๋ ต์ง€๋Š” ์•Š์•„ ํ•œ ํ•™๊ธฐ๋งŒ์— 4๋Œ€ ์ •๋ ฌ์— ์ด์ง„ ํŠธ๋ฆฌ๊นŒ์ง€ ์ง„๋„๋ฅผ ๋บ„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ปด๊ณต๊ณผ ์™ธ์—๋Š” ํ•™๋…„์ด ์˜ฌ๋ผ๊ฐ€์„œ ์ด๊ฑธ ์“ธ ์ด์œ ๊ฐ€ ์—†์œผ๋ฏ€๋กœ(...) ํƒ€๊ณผ ๊ต์ˆ˜๋“ค์˜ ์ง€์ ์œผ๋กœ ๋‹ค์‹œ C๋กœ ํšŒ๊ท€ํ–ˆ๋‹ค๊ณ . ์ด์ œ๋Š” ํ•˜์ˆ ํ•  ๊ฐ•์›๋Œ€ํ•™๊ต์™€ ๋น„์Šทํ•˜๊ฒŒ 3ํ•™๋…„ ์ „๊ณต์„ ํƒ ๊ณผ๋ชฉ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์–ธ์–ด ์ˆ˜์—…์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

๊ฐ•์›๋Œ€ํ•™๊ต ์—์„œ๋Š” 3ํ•™๋…„ ์ „๊ณตํ•„์ˆ˜ ๊ณผ๋ชฉ์ธ 'ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ก ' ๊ณผ๋ชฉ ๋‚ด์—์„œ ํ˜„์žฌ๊นŒ์ง€(~ 19. 10. 2) Ocaml ์–ธ์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆ˜์—…์ด ์ง„ํ–‰๋˜๊ณ  ์žˆ๋‹ค.



OCaml ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌ ์ค‘์ธ Inria : https://caml.inria.fr/ocaml/
OCaml ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€ : https://ocaml.org

[1] ๋ฌผ๋ก  ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋„ ์ง€์›ํ•˜๋ฏ€๋กœ ๋ชจ๋“  ๋ณ€์ˆ˜๊ฐ€ ๋ถˆ๋ณ€์ธ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.