| layout | page |
|---|---|
| title | Ruby์ ๋ํด์ |
| lang | ko |
Ruby๊ฐ ์ ์ธ๊ธฐ ์์๊น์? Ruby์ ํฌ๋ค์ ์๋ฆ๋ต๊ณ ๊ธฐ๊ต๊ฐ ๋ฐ์ด๋ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ๋งํฉ๋๋ค. ํ์ง๋ง ์ด ๋ง๋ก๋ ๋ถ์กฑํ์ง์. ์ด๋ค ์ ์ด Ruby๋ฅผ ์ด์ฒ๋ผ ๋งค๋ ฅ์ ์ธ ์ธ์ด๋ก ๋ง๋๋ ๊ฒ์ผ๊น์? {: .summary}
Ruby๋ ๊ท ํ์กํ ์ธ์ด์ ๋๋ค. Ruby๋ฅผ ๋ง๋ ์ ํคํ๋ก ๋ง์ธ ๋ชจํ (์ผ๋ช ๋ง์ธ )๋ ๊ทธ๊ฐ ์ข์ํ๋ ์ธ์ด์ธ Perl, Smalltalk, Eiffel, Ada, Lisp๋ฅผ ์์ด์ ๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด์ ํจ์ํ ์ธ์ด์ธ ์๋ก์ด ์ธ์ด๋ฅผ ๋ง๋ค์์ต๋๋ค.
๊ทธ๋ โRuby๋ฅผ ๋จ์ํ๊ฒ ๋ง๋๋ ๊ฒ์ด ์๋๋ผ ์์ฐ์ค๋ฝ๊ฒ ๋ง๋ค๋ ค๊ณ ๋ ธ๋ ฅํ๋คโ๋ผ๊ณ ๋งํ๊ณค ํฉ๋๋ค. ์ฐ๋ฆฌ์ ์ถ์ ๋ฐ์ํ๊ณ ์ ํ๋ค๋ ๊ฒ์ด์ง์.
์ด๋ ๊ฒ ๋งํ ์ ๋ ์์ต๋๋ค.
Ruby๋ ์ธ๋ป ๋ณด๊ธฐ์๋ ๊ฐ๋จํด ๋ณด์ ๋๋ค. ํ์ง๋ง ๊ทธ ๋ด๋ถ๋ ๋ฌด์ฒ์ด๋ ๋ณต์กํ์ง์. ๋ง์น ์ฌ๋์ ๋ชธ์ฒ๋ผ์1.
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๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ๋ฐ์์ ์ฌ๊ณ ๋ฅผ ์ ํํ์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ์๋๋ + ์ฐ์ฐ์ ๋์ plus๋ผ๊ณ ์ฐ๋ ๊ฒ์ด ๋ ์ฝ๊ธฐ ํธํ๋ค๊ณ ๊ฒฐ์ ํ๋ค๋ฉด Ruby์ ๋นํธ์ธ ํด๋์ค์ธ
Numeric์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
{% highlight ruby %} class Numeric def plus(x) self.+(x) end end
y = 5.plus 6
{% endhighlight %}
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์๋ ๋ชจ๋ ๊ฐ๋ (Objective-C์์๋ ์นดํ ๊ณ ๋ฆฌ๋ผ ๋ถ๋ฆฌ๋)์ด ์์ต๋๋ค. ๋ชจ๋์ ๋ฉ์๋์ ์ปฌ๋ ์ ์ ๋๋ค.
ํด๋์ค์ ๋ชจ๋์ ๋ฏน์ค์ธํ ์ ์๋๋ฐ, ๊ทธ๋ ๊ฒ ํ๋ฉด ์ ์ฉํ ๋ฉ์๋๋ฅผ ์์ฝ๊ฒ ์ป์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด each ๋ฉ์๋๋ฅผ ๊ตฌํํ๊ณ
์๋ ํด๋์ค๋ ์ด๋ค ๊ฒ์ด๋ Enumerable ๋ชจ๋์ ๋ฏน์ค์ธํ๊ธฐ๋ง ํ๋ฉด, each๋ฅผ ๋ฃจํ์ ์ด์ฉํด ๋ง์ ํจ์๋ค์ด ์ถ๊ฐ๋ฉ๋๋ค.
{% highlight ruby %} class MyArray include Enumerable end {% endhighlight %}
๋๋ถ๋ถ ๋ฃจ๋น์คํธ๋ค์ ์์ ๊ฐ์ ๊ธฐ๋ฅ์ด ๋ณต์กํ๊ธฐ๋ง ํ๊ณ ์ ํ์ ์ธ ๋ค์ค ์์๋ณด๋ค ํจ์ฌ ๊ฐ๊ฒฐํ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
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๋ ๋ช๋ช ๋ค๋ฅธ ๊ตฌํ์ฒด๊ฐ ์์ต๋๋ค. ๋ณธ ๊ฐ์ด๋์์๋ ์ปค๋ฎค๋ํฐ์์ ์์ฃผ ๊ฑฐ๋ก ๋๋ 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}