루비로 시작하는 프로그래밍

일반인을 위해 프로그래밍을 가르쳐주는 튜토리얼.

루비로 시작하는 프로그래밍 일반인을 위해 프로그래밍을 가르쳐주는 튜토리얼.

11장. 더 나아가서

Beyong This Tutorial

더 나아가서

자, 이제 우리는 무엇을 해야 할까요? 만약 여러분이 궁금한게 있다면, 어디에 질문을 해야할까요? 여러분의 프로그램에서 웹 페이지를 열고, 이메일을 보내거나, 디지털 사진의 크기는 어떻게 조정할 수 있을까요? 걱정 마세요. 아주 아주 많은 곳에서 루비에 대한 도움을 얻을 수 있습니다. 안타깝게도, 이것 만으로는 별로 도움이 되지 않을 것 같군요. :-)

저의 경우, 딱 세 곳에서 루비에 대한 도움을 얻습니다. 만약 간단한 문제이고, 스스로 실험을 통해 답을 찾을 수 있을 것 같으면, irb를 사용합니다. 만약 어려문 문제라는 생각이 들면 곡괭이를 찾아봅니다. 그래도 질문을 해결할 수 없을 경우, ruby-talk에 도움을 요청합니다.

IRB: Interactive Ruby

여러분이 루비를 설치하셨다면, irb는 이미 설치되어 있습니다. irb를 사용하려면 명령창을 실행하고 irb라고 입력만 하면 됩니다. irb 모드에서는 여러분이 원하는 어떠한 루비 표현식도 작성할 수 있고, 그 결과도 즉시 알 수 있습니다. 즉, 1 + 2라고 입력하면 3이라고 알려주죠.(puts를 사용하지 않아도 된다는 점을 알아두세요!) 마치 거대한 루비 계산기라고 생각하시면 됩니다. 다 사용하고 나면, exit라고 입력만 하면 됩니다.

irb에는 이보다 훨씬 더 많은 것들이 있어요, 그렇지만 모든 것에 대해서 '곡괭이'에서 다 알 수 있습니다.

곡괭이: “프로그래밍 루비”

데이비드 토마스와 앤드류 헌트(실용주의 프로그래머)가 집필한 “프로그래밍 루비#”는 꼭! 가져야만 하는 루비 책입니다. 특히 가장 최신 버전의 루비를 다루고 있는 2판을 추천합니다. 그리고 조금 오래된(하지만 여전히 유용한!) 버전은 온라인에서 무료로 볼 수 있습니다.(만약, 윈도우 버전의 루비를 설치한다면 함께 설치됩니다.)

이 책에서 여러분은 기본적인 내용부터 고급 내용까지, 루비에 관한 모든 것을 찾을 수 있습니다. 읽기도 쉽고, 이해도 잘되며, 한마디로 완벽합니다. 소원이 있다면 모든 프로그래밍 언어 책이 이 책 정도였으면 좋겠습니다. 책의 뒷 부분에는 루비의 모든 클래스의 메소드에 대한 자세한 설명이 예제와 함께 있습니다. 바로 제가 이 책을 사랑하는 이유입니다.

책의 내용은 여러 곳(실용주의 프로그래머의 웹 사이트를 포함)에서 찾을 수 있습니다. 제가 즐겨 찾는 곳은 ruby-doc.org 입니다. 이 곳에는 좌측에 잘 정리된 목차와 찾아보기(Index)가 제공됩니다. (ruby-doc.org에는 코어 API 와 스탠다드 라이브러리 같은 훌륭한 문서들이 더 있습니다. 기본적으로, 루비의 버전이 올라가면 모든 내용이 개정됩니다. 한 번 확인해보세요.)

그리고 왜 책을 “곡괭이”라 부를까요? 이유는 책의 표지에 곡괭이가 있기 때문입니다. 싱거운 이름 같지만, 이미 널리 사용되고 있죠.

Ruby-Talk: 루비 메일링 리스트

가끔은 irb와 곡괭이로도 문제를 해결할 수 없을 때도 있습니다. 그리고 여러분이 작업하고 있는 프로그램을 누군가 먼저 만들지는 않았을까 궁금하고, 또 그것을 사용하고 싶을 수도 있습니다. 그렇다면, 여러분이 가야할 곳은 루비 메일링 리스트인 ruby-talk입니다. 거기에는 친근하고, 똑똑하며, 잘 도와주는 사람들이 있습니다. 더 자세히 알고 싶거나, 구독하기를 원한다면 이곳을 참고하세요.

주의: 메일링 리스트에는 하루에도 엄청난 양의 메일이 올라옵니다. 그래서 저는 다른 메일 폴더로 자동으로 이동 되도록 설정하여, 다른 메일을 방해하지 않도록 하였습니다. 만약 모든 메일을 원하지 않으면 수신하지 않아도 됩니다. ruby-talk 메일링 리스트는 comp.lang.ruby 뉴스 그룹에도 복사가 되기 때문에, 똑같은 메일 내용을 볼 수 있습니다. 어디서 확인하든 양식만 조금 다를뿐, 동일한 내용을 볼 수 있습니다.

Tim Toady

여러분을 이것으로 부터 보호하기 위해 노력하였지만, 곧 난관에 부닥칠 개념인 TMTOWTDI(팀 투데이로 발음)를 알려드려야 할 것 같습니다. TMTOWTDI는  “There's More Than One Way To Do It.”(어떤 것을 위한 방법은 하나 이상 존재한다.)의 약자 입니다.

이제 여러분에게 TMTOWTDI 가 얼마나 멋진지 알려드릴 차례입니다. 하지만 누군가는 아주 다르게 느낄 수 있습니다. 저는 그것에 대해 정말 강한 인상을 받지는 않았습니다. 하지만 프로그램을 어떻게 만드는지를 누군가에게 알려주는 방법에 있어서는 끔찍하다고 생각합니다. (어떤 것을 하기위해 한가지 방법으로만 배운다면 도전도 없고 어려움도 없을것입니다.)

하지만, 이제 여러분은 이 튜토리얼을 끝내고 나면, 많이 다른 코드를 보게 될 것입니다. 예를 들면, 저는 문자열을 만드는 적어도 다섯 가지 방법이 떠오르네요. 각 코드는 조금씩 다르게 동작합니다. 저는 이 튜토리얼에서 가장 간단한 여섯 가지 방법을 보여드린 것 뿐입니다.

그리고 분기문에서도, if 키워드만 알려드렸지, unless 키워드는 알려드리지 않았습니다. if, unless, 그리고 while을 사용한 한 줄 짜리 코드 조각을 irb에서 보여드리면 다음과 같습니다.

#  These words are from a program I wrote to generate
#  English-like babble.  Cool, huh?
puts 'grobably combergearl kitatently thememberate' if 5 == 2**2 + 1**1
puts 'enlestrationshifter supposine follutify blace' unless 'Chris'.length == 5

#실행결과

grobably combergearl kitatently thememberate

 

그리고 마지막으로 메서드를 작성하는 블럭(프로시저가 아닌)을 사용한 다른 방법도 있습니다. 여러분은 함수를 정의 할 때, 전달인자 목록에 &block을 사용하여 블럭으로 묶은 내용이 프로시저로 사용되는 방법을 보았습니다. 그리고 블럭을 호출하기 위해서 block.call을 사용하기만 하면 되었지요. 하지만, 더 짧은 방법이 있습니다.(개인적으로는 더 복잡한 방법이라고 생각합니다.)

아래와 같은 방법 대신에

def doItTwice(&block)
  block.call
  block.call
end

doItTwice do
  puts 'murditivent flavitemphan siresent litics'
end

#실행결과

murditivent flavitemphan siresent litics
murditivent flavitemphan siresent litics

다음과 같은  방법을 사용하면 됩니다.

def doItTwice
  yield
  yield
end

doItTwice do
  puts 'buritiate mustripe lablic acticise'
end

#실행결과

buritiate mustripe lablic acticise
buritiate mustripe lablic acticise

저는 잘 모르겠네요. 여러분은 어떻게 생각하세요? 저만 그런 것일 수 있지만, yield 라고요?! 만약 call_the_hidden_block(숨겨진_블럭_호출)이라면 더 받아들이기 쉬울 것 같네요. 많은 사람들이 그들에게는 yield가 적절하다고 합니다. 저는 바로 이러한 차이가 TMTOWTDI 전부를 말해주는 게 아닐까라는 생각이 드네요. 그들은 그들의 방법대로, 저는 저만의 방법대로 하는 거죠.

11장, 그리고 튜토리얼을 마무리하며..

나쁜 일이 아닌 좋은 일에만 사용하기 바랍니다. :-) 만약 이 튜토리얼이 도움이 되었다면(또는 모호하거나, 오류를 찾았다면), 저에게 알려주세요!

참고

댓글

댓글 본문
버전 관리
김나솔
현재 버전
선택 버전
graphittie 자세히 보기