Skip to content

Latest commit

ย 

History

History
178 lines (124 loc) ยท 9.53 KB

File metadata and controls

178 lines (124 loc) ยท 9.53 KB
layout page
title Ruby์— ๋Œ€ํ•ด์„œ
lang ko

Ruby๊ฐ€ ์™œ ์ธ๊ธฐ ์žˆ์„๊นŒ์š”? Ruby์˜ ํŒฌ๋“ค์€ ์•„๋ฆ„๋‹ต๊ณ  ๊ธฐ๊ต๊ฐ€ ๋›ฐ์–ด๋‚œ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ง๋กœ๋Š” ๋ถ€์กฑํ•˜์ง€์š”. ์–ด๋–ค ์ ์ด Ruby๋ฅผ ์ด์ฒ˜๋Ÿผ ๋งค๋ ฅ์ ์ธ ์–ธ์–ด๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ผ๊นŒ์š”? {: .summary}

Ruby๋ฅผ ๋งŒ๋“  ๋งˆ์ธ ์˜ ๋ชฉํ‘œ

Ruby๋Š” ๊ท ํ˜•์žกํžŒ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. Ruby๋ฅผ ๋งŒ๋“  ์œ ํ‚คํžˆ๋กœ ๋งˆ์ธ ๋ชจํ† (์ผ๋ช… ๋งˆ์ธ )๋Š” ๊ทธ๊ฐ€ ์ข‹์•„ํ•˜๋Š” ์–ธ์–ด์ธ Perl, Smalltalk, Eiffel, Ada, Lisp๋ฅผ ์„ž์–ด์„œ ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด์ž ํ•จ์ˆ˜ํ˜• ์–ธ์–ด์ธ ์ƒˆ๋กœ์šด ์–ธ์–ด๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Š” โ€œRuby๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋งŒ๋“ค๋ ค๊ณ  ๋…ธ๋ ฅํ•œ๋‹คโ€๋ผ๊ณ  ๋งํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ์‚ถ์„ ๋ฐ˜์˜ํ•˜๊ณ ์ž ํ•œ๋‹ค๋Š” ๊ฒƒ์ด์ง€์š”.

์ด๋ ‡๊ฒŒ ๋งํ•œ ์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Ruby๋Š” ์–ธ๋œป ๋ณด๊ธฐ์—๋Š” ๊ฐ„๋‹จํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ ๋‚ด๋ถ€๋Š” ๋ฌด์ฒ™์ด๋‚˜ ๋ณต์žกํ•˜์ง€์š”. ๋งˆ์น˜ ์‚ฌ๋žŒ์˜ ๋ชธ์ฒ˜๋Ÿผ์š”1.

Ruby์˜ ์„ฑ์žฅ์„ธ

1995๋…„์— ์ฒ˜์Œ ๊ณต๊ฐœ๋œ ์ดํ›„๋กœ ์ „์„ธ๊ณ„์— ๋งŽ์€ Ruby ๊ฐœ๋ฐœ์ž๊ฐ€ ์ƒ๊ฒจ๋‚ฌ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ 2006๋…„์—๋Š” ์ˆ˜๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด Ruby๋ฅผ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ์ „ ์„ธ๊ณ„์˜ ์›ฌ๋งŒํ•œ ๋„์‹œ์—๋Š” ํ™œ๋ฐœํ•œ ์‚ฌ์šฉ์ž ๊ทธ๋ฃน์ด ๋งŒ๋“ค์–ด์กŒ๊ณ , Ruby์™€ ๊ด€๋ จ๋œ ์ฝ˜ํผ๋Ÿฐ์Šค๋Š” ๋ชจ๋‘ ๋งค์ง„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Ruby์˜ ์ฃผ๋œ ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์ธ Ruby-Talk๋Š” 2006๋…„๊นŒ์ง€ ํ•˜๋ฃจ์— ํ‰๊ท  200๊ฐœ์˜ ๊ธ€์ด ์˜ฌ๋ผ์˜ฌ ์ •๋„๋กœ ์„ฑ์žฅํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ ๋ช‡ ๋…„ ๋™์•ˆ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๊ฒฝํ–ฅ์ด ํ•˜๋‚˜์˜ ์ง‘์ค‘๋œ ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ๋ณด๋‹ค ์ž‘์€ ๊ทธ๋ฃน์—์„œ์˜ ํ† ๋ก ์„ ์„ ํ˜ธํ•˜๊ฒŒ ๋ฐ”๋€Œ์–ด ํ† ๋ก ์˜ ์ˆซ์ž๋Š” ๊ฐ์†Œ ์ค‘์ž…๋‹ˆ๋‹ค.

Ruby๋Š” ์„ฑ์žฅ์„ธ์™€ ์ธ๊ธฐ ๋ฉด์—์„œ TIOBE Index ๊ฐ™์€ ์„ธ๊ณ„์ ์ธ ๋žญํ‚น์˜ 10์œ„๊ถŒ ์•ˆ์— ๋“œ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์„ฑ์žฅ์€ Ruby๋กœ ๋งŒ๋“ค์–ด์ง„ ๋Œ€์ค‘์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด, ํŠนํžˆ Ruby on Rails ์›น ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ณต์ž…๋‹ˆ๋‹ค.

Ruby๋Š” [์™„์ „ํžˆ ๋ฌด๋ฃŒ]({{ site.license.url }})์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ณต์‚ฌ, ์ˆ˜์ •, ๋ฐฐํฌ๊นŒ์ง€๋„ ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฒƒ์€ ๊ฐ์ฒด

์ฒ˜์Œ์— ๋งˆ์ธ ๋Š” ์ด์ƒ์ ์ธ ๋ฌธ๋ฒ•์„ ๊ฐ€์ง„ ์–ธ์–ด๋ฅผ ์ฐพ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋•Œ๋ฅผ ํšŒ๊ณ ํ•˜๋ฉฐ ๊ทธ๋Š” โ€œ๋‚˜๋Š” Perl๋ณด๋‹ค ๊ฐ•๋ ฅํ•˜๊ณ  Python๋ณด๋‹ค๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค2.โ€๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

Ruby์—์„œ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Ruby์—์„œ ๋ชจ๋“  ๊ฒƒ์€ ์ž์‹ ๋งŒ์˜ ์†์„ฑ๊ณผ ์•ก์…˜์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ด๋Ÿฐ ์†์„ฑ์„ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ผ๊ณ  ํ•˜๊ณ , ์•ก์…˜์„ ๋ฉ”์„œ๋“œ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Ruby์˜ ์ˆœ์ˆ˜ ๊ฐ์ฒด์ง€ํ–ฅ ์ ‘๊ทผ๋ฒ•์€ ์•„๋ž˜์˜ ์˜ˆ์ œ์ฒ˜๋Ÿผ ์ˆซ์ž์— ์•ก์…˜์„ ์ทจํ•˜๋Š” ์ฝ”๋“œ๋กœ ๋Œ€ํ‘œ๋˜๊ณค ํ•ฉ๋‹ˆ๋‹ค.

{% highlight ruby %} 5.times { print "์šฐ๋ฆฌ๋Š” Ruby๋ฅผ ์‚ฌ๋ž‘ํ•ด์š”! ๋„ˆ๋ฌด ๋ฉ‹์ ธ์š”!" } {% endhighlight %}

๋งŽ์€ ์–ธ์–ด์—์„œ ์ˆซ์ž๋Š” ์›์‹œ ํƒ€์ž…์ด์ง€ ๊ฐ์ฒด๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Ruby๋Š” Smalltalk์˜ ์˜ํ–ฅ์„ ๋ฐ›์•„ ๋ชจ๋“  ํ˜•ํƒœ์˜ ๊ฒƒ์— ๋ฉ”์„œ๋“œ์™€ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋“  ๊ณณ์—์„œ ์ผ๊ด€๋˜๊ฒŒ ์ ์šฉ๋˜๋ฏ€๋กœ Ruby ์‚ฌ์šฉ๋ฒ•์„ ์‰ฝ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

Ruby์˜ ์œ ์—ฐํ•จ

๊ฐœ๋ฐœ์ž๊ฐ€ Ruby์˜ ์–ด๋–ค ๋ถ€๋ถ„์ด๋“  ์ž์œ ๋กญ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ์œ ์—ฐํ•œ ์–ธ์–ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›ํ•œ๋‹ค๋ฉด Ruby ์ฝ”์–ด ๋ถ€๋ถ„๋„ ์ œ๊ฑฐํ•˜๊ณ  ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์ฝ”๋“œ์— ๋ฌด์—‡์ธ๊ฐ€๋ฅผ ๋ง๋ถ™์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Ruby๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž์˜ ์‚ฌ๊ณ ๋ฅผ ์ œํ•œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜๋Š” + ์—ฐ์‚ฐ์ž ๋Œ€์‹  plus๋ผ๊ณ  ์“ฐ๋Š” ๊ฒƒ์ด ๋” ์ฝ๊ธฐ ํŽธํ•˜๋‹ค๊ณ  ๊ฒฐ์ •ํ–ˆ๋‹ค๋ฉด Ruby์˜ ๋นŒํŠธ์ธ ํด๋ž˜์Šค์ธ Numeric์— ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

{% highlight ruby %} class Numeric def plus(x) self.+(x) end end

y = 5.plus 6

์ด์ œ y๋Š” 11์ด ๋˜์—ˆ๋‹ค

{% endhighlight %}

Ruby์˜ ์—ฐ์‚ฐ์ž๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•œ ๋ฌธ๋ฒ• ๋‹จ์ถ•์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด ๋ถ€๋ถ„๋„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Ruby์˜ ํ‘œํ˜„๋ ฅ์„ ํ’๋ถ€ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋ธ”๋ก

Ruby์˜ ๋ธ”๋ก ๊ธฐ๋Šฅ ๋˜ํ•œ ๋›ฐ์–ด๋‚œ ์œ ์—ฐ์„ฑ์˜ ์›์ฒœ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์–ด๋–ค ๋ฉ”์„œ๋“œ์—๋“  ํด๋กœ์ €๋ฅผ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ๋ฉ”์„œ๋“œ์˜ ๋™์ž‘์„ ๊ธฐ์ˆ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Ruby์—์„œ ์ด ํด๋กœ์ €๋ฅผ ๋ธ”๋ก์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์ด๋Š” PHP, Visual Basic ๋“ฑ ๋‹ค๋ฅธ ๋ช…๋ นํ˜• ์–ธ์–ด์—์„œ Ruby๋กœ ์ด์ฃผํ•œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ฐ€์žฅ ๋งค๋ ฅ์ ์ธ ๊ธฐ๋Šฅ์œผ๋กœ ๊ผฝํž™๋‹ˆ๋‹ค.

๋ธ”๋ก์€ ํ•จ์ˆ˜ํ˜• ์–ธ์–ด์—์„œ ์•„์ด๋””์–ด๋ฅผ ๋”ฐ์™”์Šต๋‹ˆ๋‹ค. ๋งˆ์ธ ๋Š” โ€œRuby ํด๋กœ์ €๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ๋‚˜๋Š” Lisp์˜ ํด๋กœ์ € ๊ธฐ๋Šฅ์„ ์กด์ค‘ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค3.โ€๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

{% highlight ruby %} search_engines = %w[Google Yahoo MSN].map do |engine| "http://www." + engine.downcase + ".com" end {% endhighlight %}

์œ„ ์˜ˆ์ œ์—์„œ ๋ธ”๋ก์€ do ... end ๋ฌธ๋ฒ• ๊ตฌ์กฐ์— ๊ธฐ์ˆ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. map ๋ฉ”์„œ๋“œ๋Š” ์ฃผ์–ด์ง„ ๋‹จ์–ด ๋ชฉ๋ก์— ๋ธ”๋ก์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ Ruby์˜ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋„ ๊ทธ ๋™์ž‘ ์ค‘ ์ผ๋ถ€๋ฅผ ์ž์‹ ์˜ ๋ธ”๋ก์œผ๋กœ ์ฑ„์›Œ๋„ฃ์„ ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์—ด๋ฆฐ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Ruby์™€ ๋ฏน์Šค์ธ

๋‹ค๋ฅธ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์™€ ๋‹ฌ๋ฆฌ Ruby๋Š” ์˜๋„์ ์œผ๋กœ ๋‹จ์ผ ์ƒ์†๋งŒ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  Ruby์—๋Š” ๋ชจ๋“ˆ ๊ฐœ๋…(Objective-C์—์„œ๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๋ผ ๋ถˆ๋ฆฌ๋Š”)์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์€ ๋ฉ”์„œ๋“œ์˜ ์ปฌ๋ ‰์…˜์ž…๋‹ˆ๋‹ค.

ํด๋ž˜์Šค์— ๋ชจ๋“ˆ์„ ๋ฏน์Šค์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์œ ์šฉํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์†์‰ฝ๊ฒŒ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด each ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค๋Š” ์–ด๋–ค ๊ฒƒ์ด๋“  Enumerable ๋ชจ๋“ˆ์„ ๋ฏน์Šค์ธํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด, each๋ฅผ ๋ฃจํ”„์— ์ด์šฉํ•ด ๋งŽ์€ ํ•จ์ˆ˜๋“ค์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

{% highlight ruby %} class MyArray include Enumerable end {% endhighlight %}

๋Œ€๋ถ€๋ถ„ ๋ฃจ๋น„์ŠคํŠธ๋“ค์€ ์œ„์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ๋ณต์žกํ•˜๊ธฐ๋งŒ ํ•˜๊ณ  ์ œํ•œ์ ์ธ ๋‹ค์ค‘ ์ƒ์†๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Ruby ์ฝ”๋“œ์˜ ์™ธํ–ฅ

Ruby๋Š” ์ข…์ข… ๋งค์šฐ ์ œํ•œ๋œ ๋ฌธ์žฅ ๋ถ€ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ์˜์–ด ํ‚ค์›Œ๋“œ๋ฅผ ์„ ํ˜ธํ•˜์ง€๋งŒ, ์ผ๋ถ€ ๋ฌธ์žฅ ๋ถ€ํ˜ธ๋Š” Ruby๋ฅผ ์žฅ์‹ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Ruby์—๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‹จ์ง€ ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ๊ฐ„๋‹จํ•œ ์ด๋ฆ„ ๊ด€๋ก€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • var ์ง€์—ญ๋ณ€์ˆ˜.
  • @var ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜.
  • $var ์ „์—ญ๋ณ€์ˆ˜.

์ด๋Ÿฐ ๋ช‡ ๊ฐ€์ง€ ์žฅ์น˜๋Š” ๋ณ€์ˆ˜์˜ ์—ญํ• ์„ ๋ช…ํ™•ํžˆ ๋“œ๋Ÿฌ๋ƒ„์œผ๋กœ์จ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์— ๋ถ™์ธ๋‹ค๋ฉด ์ •๋ง ํ”ผ๊ณคํ•  self.๋„ ๋Œ€๋ถ€๋ถ„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณ ๊ธ‰ ๊ธฐ๋Šฅ

Ruby๋Š” ๊ฐœ๋ฐœ์ž์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ์œ ์šฉํ•œ ์ผ๋ถ€๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Ruby์—๋Š” Java, Python์ฒ˜๋Ÿผ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์ด ์žˆ์–ด์„œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Ruby๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๋งˆํฌ-์Šค์œ• ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ™•์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋ ˆํผ๋Ÿฐ์Šค ์นด์šดํŠธ๋ฅผ ๊ด€๋ฆฌํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋งˆ์ธ ๋Š” ์ด๋ฅผ โ€œ๊ฑด๊ฐ•์„ ์œ„ํ•œโ€ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ํ‘œํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • C ์—์„œ Ruby๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ„๊ฒฐํ•œ API๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์—, Perl์ด๋‚˜ Python๋ณด๋‹ค ์‰ฝ๊ฒŒ C ํ™•์žฅ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์Šคํฌ๋ฆฝํŒ…์„ ์œ„ํ•ด Ruby๋ฅผ ์ž„๋ฒ ๋”ฉํ•˜๋Š” ๊ฒƒ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก , SWIG ์ธํ„ฐํŽ˜์ด์Šค๋„ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

  • OS๊ฐ€ ์ง€์›ํ•œ๋‹ค๋ฉด ํ™•์žฅ ๊ธฐ๋Šฅ์„ ๋™์ ์œผ๋กœ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Ruby๋Š” ์ด์‹์„ฑ์ด ๋งค์šฐ ๋†’์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„ GNU Linux์—์„œ ๊ฐœ๋ฐœ๋˜์—ˆ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ UNIX, macOS, Windows ๋“ฑ์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Ruby์˜ ๋‹ค๋ฅธ ๊ตฌํ˜„์ฒด๋“ค

์–ธ์–ด๋กœ์„œ Ruby๋Š” ๋ช‡๋ช‡ ๋‹ค๋ฅธ ๊ตฌํ˜„์ฒด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณธ ๊ฐ€์ด๋“œ์—์„œ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ž์ฃผ ๊ฑฐ๋ก ๋˜๋Š” MRI(โ€œMatz์˜ Ruby ์ธํ„ฐํ”„๋ฆฌํ„ฐโ€)๋‚˜ CRuby(C๋กœ ์ž‘์„ฑ๋œ Ruby) ๊ฐ™์€ ๋ ˆํผ๋Ÿฐ์Šค ๊ตฌํ˜„์ฒด(reference implementation)์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค๋งŒ, ๋‹ค๋ฅธ ๊ฒƒ๋“ค๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋“ค์€ ํŠน์ • ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•  ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ, ๋‹ค๋ฅธ ์–ธ์–ด ํ˜น์€ ํ™˜๊ฒฝ๊ณผ์˜ ์ถ”๊ฐ€ ํ†ตํ•ฉ์„ ์ง€์›ํ•œ๋‹ค๊ฑฐ๋‚˜ MRI๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํŠน๋ณ„ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ฑฐ๋‚˜ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ํ•ด๋‹น ๊ตฌํ˜„์ฒด ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

  • JRuby๋Š” JVM(Java ๊ฐ€์ƒ ๋จธ์‹ ) ์œ„์—์„œ ๊ตฌ๋™๋˜๋Š” Ruby์ž…๋‹ˆ๋‹ค. JVM์˜ ์ตœ์ ํ™” JIT ์ปดํŒŒ์ผ๋Ÿฌ, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ, ๋ณ‘๋ ฌ ์Šค๋ ˆ๋“œ, ํˆด ์—์ฝ”์‹œ์Šคํ…œ, ๊ทธ๋ฆฌ๊ณ  ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง‘ํ•ฉ์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Rubinius๋Š” โ€˜Ruby๋กœ ์“ฐ์ธ Rubyโ€™์ž…๋‹ˆ๋‹ค. LLVM ์œ„์— ๊ตฌ์ถ•๋˜์–ด, Rubinius๋Š” ๋‹ค๋ฅธ ์–ธ์–ด ์—ญ์‹œ ๊ตฌ์ถ•๋œ ๋ฉ‹์ง„ ๊ฐ€์ƒ ๋จธ์‹  ์œ„์—์„œ ํ™œ๋™ํ•ฉ๋‹ˆ๋‹ค.
  • mruby๋Š” Ruby์˜ ๊ฒฝ๋Ÿ‰ ๊ตฌํ˜„์ฒด๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•ˆ์— ๋งํฌ๋˜๊ฑฐ๋‚˜ ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Ruby์˜ ์ฐฝ์‹œ์ž์ธ ์œ ํ‚คํžˆ๋กœ โ€œMatzโ€ ๋งˆ์ธ ๋ชจํ† ๊ฐ€ ๊ฐœ๋ฐœ์„ ์ด๋Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ์กฐ

1 ๋งˆ์ธ , Ruby-Talk ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์—์„œ, May 12th, 2000. {: #fn1}

2 ๋งˆ์ธ , An Interview with the Creator of Ruby, Nov. 29th, 2001. {: #fn2}

3 ๋งˆ์ธ , Blocks and Closures in Ruby, December 22nd, 2003. {: #fn3}