|
| 1 | +--- |
| 2 | +layout: page |
| 3 | +title: "공식 Ruby FAQ" |
| 4 | +lang: ko |
| 5 | + |
| 6 | +header: | |
| 7 | + <div class="multi-page"> |
| 8 | + <a href="../" title="Content">콘텐츠</a> |
| 9 | + <span class="separator"> | </span> |
| 10 | + <strong>1</strong> |
| 11 | + <span class="separator"> | </span> |
| 12 | + <a href="/en/documentation/faq/2/" title="파트 2">2</a> |
| 13 | + <span class="separator"> | </span> |
| 14 | + <a href="/en/documentation/faq/3/" title="파트 3">3</a> |
| 15 | + <span class="separator"> | </span> |
| 16 | + <a href="/en/documentation/faq/4/" title="파트 4">4</a> |
| 17 | + <span class="separator"> | </span> |
| 18 | + <a href="/en/documentation/faq/5/" title="파트 5">5</a> |
| 19 | + <span class="separator"> | </span> |
| 20 | + <a href="/en/documentation/faq/6/" title="파트 6">6</a> |
| 21 | + <span class="separator"> | </span> |
| 22 | + <a href="/en/documentation/faq/7/" title="파트 7">7</a> |
| 23 | + <span class="separator"> | </span> |
| 24 | + <a href="/en/documentation/faq/8/" title="파트 8">8</a> |
| 25 | + <span class="separator"> | </span> |
| 26 | + <a href="/en/documentation/faq/9/" title="파트 9">9</a> |
| 27 | + <span class="separator"> | </span> |
| 28 | + <a href="/en/documentation/faq/10/" title="파트 10">10</a> |
| 29 | + <span class="separator"> | </span> |
| 30 | + <a href="/en/documentation/faq/11/" title="파트 11">11</a> |
| 31 | + </div> |
| 32 | + <h1>공식 Ruby FAQ</h1> |
| 33 | +
|
| 34 | +--- |
| 35 | + |
| 36 | +{% include faq-notice.md %} |
| 37 | + |
| 38 | +## 일반적인 질문 |
| 39 | + |
| 40 | +### Ruby란? |
| 41 | + |
| 42 | +Ruby는 Yukihiro Matsumoto(이 문서와 메일링 리스트에서 "Matz"라는 핸들을 |
| 43 | +사용함)가 만든 단순하고 강력한 객체 지향 프로그래밍 언어입니다. |
| 44 | + |
| 45 | +Perl과 마찬가지로 Ruby는 텍스트 처리에 능숙합니다. Smalltalk와 마찬가지로 Ruby의 |
| 46 | +모든 것은 객체이며 Ruby에는 블록, 이터레이터, 메타 클래스 및 기타 유용한 기능이 |
| 47 | +있습니다. |
| 48 | + |
| 49 | +Ruby를 사용하여 서버를 작성하고, 프로토타입을 실험하고, 일상적인 프로그래밍 작업을 |
| 50 | +수행할 수 있습니다. 완전히 통합된 객체 지향 언어인 Ruby는 확장성이 뛰어납니다. |
| 51 | + |
| 52 | +Ruby의 기능: |
| 53 | + |
| 54 | +* 간단한 구문, |
| 55 | +* 기본적인 객체 지향 기능(클래스, 메서드, 객체 등), |
| 56 | +* 특별한 객체 지향 기능(믹스인, 싱글턴 메서드, 리네이밍 등), |
| 57 | +* 연산자 오버로딩, |
| 58 | +* 예외 처리, |
| 59 | +* 이터레이터와 클로저, |
| 60 | +* 가비지 컬렉션, |
| 61 | +* 동적 로딩(아키텍처에 따라 다름), |
| 62 | +* 높은 이동성(다양한 Unix, Windows, DOS, macOS, OS/2, Amiga 등에서 실행 가능). |
| 63 | + |
| 64 | +### Ruby 코드를 보여주세요! |
| 65 | + |
| 66 | +이름과 나이가 있는 `Person`이라는 클래스를 정의해 봅시다. 몇 명의 사람을 만들고 |
| 67 | +검사하여 코드를 테스트합니다. |
| 68 | + |
| 69 | +~~~ |
| 70 | +class Person |
| 71 | + attr_accessor :name, :age |
| 72 | +
|
| 73 | + def initialize(name, age) |
| 74 | + @name = name |
| 75 | + @age = age.to_i |
| 76 | + end |
| 77 | +
|
| 78 | + def inspect |
| 79 | + "#{name} (#{age})" |
| 80 | + end |
| 81 | +end |
| 82 | +
|
| 83 | +p1 = Person.new("Elmo", 4) |
| 84 | +p2 = Person.new("Zoe", 7) |
| 85 | +
|
| 86 | +p1 # => Elmo (4) |
| 87 | +p2 # => Zoe (7) |
| 88 | +~~~ |
| 89 | + |
| 90 | +이제 다음과 같은 줄이 포함된 파일 `ages`에서 이름과 나이를 읽어서 사람들의 |
| 91 | +배열을 채웁니다. |
| 92 | + |
| 93 | +~~~ |
| 94 | +Bert: 8 |
| 95 | +Cookie: 11 |
| 96 | +Elmo: 4 |
| 97 | +Ernie: 8 |
| 98 | +Zoe: 7 |
| 99 | +~~~ |
| 100 | + |
| 101 | +이 코드는 정규식을 사용하여 입력 파일에서 연속적인 줄을 구문 분석하여 각 일치 |
| 102 | +항목에 대해 새 `Person` 객체를 만들고 배열 `people`의 맨 뒤에 푸시합니다. |
| 103 | + |
| 104 | +~~~ |
| 105 | +people = Array.new |
| 106 | +
|
| 107 | +File.foreach("ages") do |line| |
| 108 | + people << Person.new($1, $2) if line =~ /(.*):\s+(\d+)/ |
| 109 | +end |
| 110 | +
|
| 111 | +people # => [Bert (8), Cookie (11), Elmo (4), Ernie (8), Zoe (7)] |
| 112 | +~~~ |
| 113 | + |
| 114 | +이제 사람의 나이를 기준으로 결과를 정렬해 보겠습니다. 여러 가지 방법으로 이를 |
| 115 | +수행할 수 있습니다. Ruby에 두 사람을 비교하는 방법을 알려주는 정렬 블록을 정의할 |
| 116 | +수 있습니다. |
| 117 | + |
| 118 | +~~~ |
| 119 | +sorted = people.sort {|a, b| a.age <=> b.age } |
| 120 | +sorted # => [Elmo (4), Zoe (7), Bert (8), Ernie (8), Cookie (11)] |
| 121 | +~~~ |
| 122 | + |
| 123 | +또 다른 방법은 클래스 `Person`에 대한 비교 메서드를 변경하는 것입니다. |
| 124 | + |
| 125 | +~~~ |
| 126 | +class Person |
| 127 | + def <=>(other) |
| 128 | + age <=> other.age |
| 129 | + end |
| 130 | +end |
| 131 | +people.sort # => [Elmo (4), Zoe (7), Bert (8), Ernie (8), Cookie (11)] |
| 132 | +~~~ |
| 133 | + |
| 134 | +### 이름이 "Ruby"인 이유는 무엇인가요? |
| 135 | + |
| 136 | +Perl의 영향을 받은 Matz는 새로운 언어에 보석 이름을 사용하고 싶었고 동료의 |
| 137 | +탄생석을 따서 Ruby라는 이름을 지었습니다. |
| 138 | + |
| 139 | +나중에 그는 Ruby가 여러 상황에서 Perl 바로 다음에 오는 것을 깨달았습니다. |
| 140 | +탄생석에서 Perl은 6월, Ruby는 7월입니다. 폰트 크기 측정 시 pearl은 5pt, ruby는 |
| 141 | +5.5pt입니다. 그는 Ruby가 Perl보다 새로운(그리고 바라건대 더 나은) 프로그래밍 |
| 142 | +언어의 좋은 이름이라고 생각했습니다. |
| 143 | + |
| 144 | +(1999년 6월 11일 [\[ruby-talk:00394\]][ruby-talk:00394]에서 Matz의 설명을 |
| 145 | +기반으로 합니다.) |
| 146 | + |
| 147 | +[ruby-talk:00394]: https://blade.ruby-lang.org/ruby-talk/394 |
| 148 | + |
| 149 | +### Ruby의 역사는? |
| 150 | + |
| 151 | +다음은 1999년 6월 4일 [\[ruby-talk:00382\]][ruby-talk:00382]에 Matz가 작성한 |
| 152 | +게시물을 요약한 것입니다. (Ruby의 생일은 [\[ruby-list:15977\]][ruby-list:15977]에서 |
| 153 | +수정되었습니다.) |
| 154 | + |
| 155 | +> Ruby는 1993년 2월 24일에 태어났습니다. 동료와 객체 지향 스크립팅 언어의 |
| 156 | +> 가능성에 대해 이야기하고 있었습니다. 나는 Perl(Perl5가 아닌 Perl4)을 알고 |
| 157 | +> 있었지만 장난감 언어의 냄새가 나기 때문에 별로 좋아하지 않았습니다(여전히 |
| 158 | +> 그렇습니다). 객체 지향 스크립팅 언어는 매우 유망해 보였습니다. |
| 159 | +
|
| 160 | +> 저는 그때 Python을 알았습니다. 그러나 나는 그것이 진정한 객체 지향 언어라고 |
| 161 | +> 생각하지 않았기 때문에 그것을 좋아하지 않았습니다. 객체 지향 기능은 언어에 대한 추가 |
| 162 | +> 기능으로 나타났습니다. 15년 동안 언어 마니아이자 객체 지향 팬으로서 저는 진정한 객체 |
| 163 | +> 지향의 사용하기 쉬운 스크립팅 언어를 정말로 원했습니다. 찾아보았지만 찾을 수 |
| 164 | +> 없었습니다. |
| 165 | +
|
| 166 | +> 그래서 만들기로 했습니다. 인터프리터를 가동시키는 데 몇 달이 걸렸습니다. |
| 167 | +> 이터레이터, 예외 처리, 가비지 컬렉터 같은 내가 좋아하는 기능을 내 언어에 |
| 168 | +> 넣었습니다. |
| 169 | +
|
| 170 | +> 그런 다음 Perl의 기능을 클래스 라이브러리로 재구성하여 구현했습니다. 1995년 |
| 171 | +> 12월에 일본 국내 뉴스그룹에 Ruby 0.95를 올렸습니다. |
| 172 | +
|
| 173 | +> 그 이후로 활발한 메일링 리스트가 만들어지고 웹 페이지가 형성되었습니다. |
| 174 | +
|
| 175 | +[ruby-talk:00382]: https://blade.ruby-lang.org/ruby-talk/382 |
| 176 | +[ruby-list:15977]: https://blade.ruby-lang.org/ruby-list/15977 |
| 177 | + |
| 178 | +### Ruby 홈 페이지는 어디에 있나요? |
| 179 | + |
| 180 | +공식 Ruby 홈 페이지는 [www.ruby-lang.org](https://www.ruby-lang.org)입니다. |
| 181 | +영어 및 일본어 버전 외에도 다양한 언어로 번역되어 있습니다. |
| 182 | + |
| 183 | +Ruby 정보를 찾기 위한 좋은 출발점은 [문서](/ko/documentation/) 및 |
| 184 | +[커뮤니티](/ko/community/) 페이지입니다. |
| 185 | + |
| 186 | +### Ruby 뉴스그룹이 있나요? |
| 187 | + |
| 188 | +comp.lang.ruby는 2000년 5월에 설립되었습니다. |
| 189 | +([Conrad Schneiker](mailto:schneiker@jump.net)의 노력에 감사드립니다.) |
| 190 | + |
| 191 | +### Ruby 메일링 리스트가 있나요? |
| 192 | + |
| 193 | +Ruby에 대해 이야기하는 여러 메일링 리스트가 있습니다. |
| 194 | +자세한 내용은 [메일링 리스트](/ko/community/mailing-lists/) 페이지를 참조하세요. |
| 195 | + |
| 196 | +<https://ml.ruby-lang.org/mailman3/hyperkitty/list/ruby-talk@ml.ruby-lang.org/>를 |
| 197 | +사용하여 메일링 리스트 아카이브를 검색할 수 있습니다. (이것은 ruby-talk 메일링 리스트의 |
| 198 | +URL이며, 다른 메일링 리스트를 원하면 변경해서 사용하세요.) |
| 199 | + |
| 200 | +### mutt에서 메일링 리스트를 쓰려면 어떻게 해야 하나요? |
| 201 | + |
| 202 | +{% include faq-out-of-date.html %} |
| 203 | + |
| 204 | +일부 Ruby 메일링 리스트의 경우 메일링 리스트 소프트웨어는 제목 줄에 |
| 205 | +`ruby-core:1234`와 같은 접두어를 추가합니다. 이로 인해 일부 메일 사용자 |
| 206 | +에이전트의 스레딩이 혼동될 수 있습니다. |
| 207 | + |
| 208 | +mutt에서는 다음 변수 설정을 사용하여 스레딩을 작동시킬 수 있습니다. |
| 209 | + |
| 210 | +~~~ |
| 211 | +# reply regexp, to support MLs like ruby-talk. |
| 212 | +set reply_regexp="^(\[[a-z0-9:-]+\][[:space:]]*)?(re([\[0-9\]+])*|aw):[[:space:]]*" |
| 213 | +~~~ |
| 214 | + |
| 215 | +### "Ruby"와 "ruby" 중 어느 것이 맞습니까? |
| 216 | + |
| 217 | +공식적으로는 언어를 "Ruby"라고 합니다. 대부분의 시스템에서는 `ruby` 명령을 |
| 218 | +사용하여 호출됩니다. "Ruby" 대신 "ruby"를 사용해도 괜찮습니다. |
| 219 | + |
| 220 | +언어 이름으로 "RUBY"를 사용하지 마십시오. |
| 221 | + |
| 222 | +처음엔, 역사적으로도, "ruby"라고 불렸습니다. |
| 223 | + |
| 224 | +### Ruby 책이 있나요? |
| 225 | + |
| 226 | +{% include faq-out-of-date.html %} |
| 227 | + |
| 228 | +* Ruby 프로그래밍: 실용적인 프로그래머 가이드, |
| 229 | + (곡괭이 책) David Thomas와 Andrew Hunt 저: ISBN 0-20171-089-7, |
| 230 | + Addison-Wesley, 2000년 10월. |
| 231 | + |
| 232 | +* Matz 외의 일본어 Ruby 참고서. 일본에서는 ASCII에서 출판되었습니다(ISBN |
| 233 | + 4-7561-3254-5). 영어 번역본인 "The Ruby Programming Language"는 O'Reilly & |
| 234 | + Associates에서 구할 수 있습니다(ISBN 978-0596516178). |
| 235 | + |
| 236 | +* 일본어 "Ruby Pocket Reference"는 O'Reilly Japan에서 출판되었습니다(ISBN |
| 237 | + 4-87311-023-8). 번역본을 보고 싶다면 미국에 있는 O'Reilly에게 알려주세요. |
| 238 | + |
| 239 | +* 또한 Jeffrey Friedl의 "정규 표현식 마스터링"(Hip Owl Book): O'Reilly & |
| 240 | + Associates, ISBN 1-56592-257-3은 다양한 프로그래밍 언어에서 정규 표현식의 |
| 241 | + 기술 및 구현을 다루는 참고서입니다. 대부분 Ruby 정규 표현식과 관련성이 |
| 242 | + 높습니다. |
| 243 | + |
| 244 | +### 어떤 편집기가 Ruby를 지원하나요? |
| 245 | + |
| 246 | +{% include faq-out-of-date.html %} |
| 247 | + |
| 248 | +* [Emacs](http://www.gnu.org/software/emacs/emacs.html), |
| 249 | + [XEmacs](http://www.xemacs.org/): `ruby-mode.el`이 Ruby 배포판으로 제공됩니다. |
| 250 | + XEmacs의 일부 버전에서는 `.emacs` 파일에 `(load "font-lock")`을 추가해야 |
| 251 | + `ruby-mode.el`이 사용 중인 구문 강조 패키지를 감지할 수 있습니다. |
| 252 | +* [Vim](http://www.vim.org/): Vim 5.7 이상에는 런타임 패키지의 표준으로 Ruby |
| 253 | + 구문 파일이 있습니다. 이전 버전의 경우 Ruby용 구문 파일은 |
| 254 | + [http://www.xs4all.nl/~hipster/lib/ruby/ruby.vim](http://www.xs4all.nl/~hipster/lib/ruby/ruby.vim)에서 찾을 수 있습니다. |
| 255 | +* [Jedit](http://jedit.sourceforge.net/): Java로 작성된 휴대용 편집기로 Ruby를 |
| 256 | + 지원합니다. |
| 257 | +* [Nedit](http://www.nedit.org): Eric Santonacci는 Nedit에 대한 Ruby 지원을 |
| 258 | + 작성했습니다. |
| 259 | + [ftp://ftp.talc.fr/pub/ruby/ruby.nedit-0.1.tar.gz](ftp://ftp.talc.fr/pub/ruby/ruby.nedit-0.1.tar.gz)에서 사용 가능합니다. |
| 260 | +* Barry Shultz는 TextPad용 Ruby 정의 파일을 작성했습니다. |
| 261 | + [https://www.textpad.com/add-ons/synn2t.html](https://www.textpad.com/add-ons/synn2t.html)에서 사용 가능합니다. |
| 262 | + |
| 263 | +### Ruby 코드의 실행 결과를 주석으로 추가하려면 어떻게 해야하나요? |
| 264 | + |
| 265 | +{% include faq-out-of-date.html %} |
| 266 | + |
| 267 | +사람들은 일반적으로 각 명령문 실행 결과를 해당 명령문에 첨부된 주석으로 표시하여 |
| 268 | +Ruby 코드에 주석을 답니다. 예를 들어 다음 코드에서는 할당이 문자열 "Billy Bob"을 |
| 269 | +생성한 다음 일부 부분 문자열을 추출한 결과를 보여줍니다. |
| 270 | + |
| 271 | +~~~ |
| 272 | +str = "Billy" + " Bob" # => "Billy Bob" |
| 273 | +str[0,1] + str[2,1] + str[-2,2] # => "Blob" |
| 274 | +~~~ |
| 275 | + |
| 276 | +Emacs 및 vim 사용자는 이를 편집 환경과 통합할 수 있습니다. 이는 주석이 달린 Ruby |
| 277 | +코드가 포함된 이메일을 사람들에게 보내려는 경우에 유용합니다. `xmp`를 설치한 |
| 278 | +Emacs 사용자는 `.emacs` 파일에 다음을 추가할 수 있습니다. |
| 279 | + |
| 280 | +~~~ |
| 281 | +(defun ruby-xmp-region (reg-start reg-end) |
| 282 | + "Pipe the region through Ruby's xmp utility and replace the region with |
| 283 | + the result." |
| 284 | + (interactive "r") |
| 285 | + (shell-command-on-region reg-start reg-end |
| 286 | + "ruby -r xmp -n -e 'xmp($_, \"%l\t\t# %r\n\")'" |
| 287 | + t)) |
| 288 | +(global-set-key [(meta f10)] 'ruby-xmp-region) |
| 289 | +~~~ |
| 290 | + |
| 291 | +Vim 사용자는 매핑을 사용할 수 있습니다(hipster님 감사합니다). |
| 292 | + |
| 293 | +~~~ |
| 294 | +map <M-F10> :!ruby -r xmp -n -e 'xmp($_, "\%l\t\t\# \%r\n")'<CR> |
| 295 | +~~~ |
| 296 | + |
| 297 | +두 경우 모두 코드 영역을 강조 표시하고 Meta-F10을 눌러 주석을 추가합니다. |
| 298 | + |
| 299 | +### Ruby 매뉴얼을 읽어도 이해가 안 돼요! |
| 300 | + |
| 301 | +{% include faq-out-of-date.html %} |
| 302 | + |
| 303 | +Ruby의 구문은 Ruby 1.0 이후 상당히 안정적이지만 때때로 새로운 기능이 추가됩니다. |
| 304 | +따라서 책과 온라인 설명서가 뒤처질 수 있습니다. |
| 305 | + |
| 306 | +문제가 있는 경우 메일링 리스트([메일링 리스트 페이지](/ko/community/mailing-lists/) 참조)에서 |
| 307 | +언제든지 질문하십시오. |
| 308 | +일반적으로 언어의 작성자인 Matz, 다른 전문가, 자신과 유사한 문제를 해결한 |
| 309 | +사람들로부터 적절한 답변을 얻을 수 있습니다. |
| 310 | + |
| 311 | +문제가 있는 소스 코드와 함께 `ruby -v`의 출력을 첨부하세요. |
| 312 | + |
| 313 | +[`irb`](/en/documentation/faq/10/#irb)를 사용하는 데 문제가 있는 경우 몇 가지 |
| 314 | +제한 사항이 있다는 점에 유의하세요. `irb --single-irb`를 사용하거나 `ruby` |
| 315 | +명령을 직접 사용하여 스크립트를 사용해 보세요. |
| 316 | + |
| 317 | +메일링 리스트에 비슷한 질문이 있을 수 있으며 질문하기 전에 최근 |
| 318 | +메일(RFC1855:3.1.1, 3.1.2)을 읽어보는 것이 좋습니다. |
| 319 | +하지만 메일링 리스트에서 질문하시면 정답이 곧 나올 것입니다. |
0 commit comments