Humble Little Ruby Book/Chap0
0. 0 무엇에 관하여 말할 겁니까? ¶여러분들은 (직장이나 모임에서) 새로운 도구에 대해 모르는 척 하는 것이 싫어서 집에 가져간 후, 도구의 상자를 여는데에도 건전지와 그레이프후르츠, 세가지 언어를 말할 수 있는 능력이 필요하다고 설명할건가요? 그럴거라고요? 그럼 다음 질문에 대답해 보십시오. 루비는 강 어귀를 넘나드는 크고 탄력있는 괴물들에 대해 어떻게 대응할까요? 모른다고요? 그럼 여러분들을 지루하게 하기 전에 몇가지 좋은 점들과 어려워 보이는 것을 말할 필요가 있을것 같습니다.
0.1. 도대체 루비가 뭡니까? ¶루비는 오픈소스, 다중패러다임, 인터프리터 프로그래밍 언어입니다. (이건 제가 알고 있는 부분의 일부분입니다! 앞으로 더 설명할 거라고 약속드리지요!) 루비는 유키히로 "마츠" 마츠모토에 의해 제작되었습니다. 그는 좋은 사람으로 현재 일본 시마네현에 거주하고 있습니다. 이 언어에 대한 마츠의 작업은 1993년 2월 24일부터 시작되었습니다. (이 날을 대부분 루비 언어의 탄생일로 생각합니다. 제가 듣기론 그들은 2단 케이크를 자르고 생일축하 노래를 불렀다는군요.) 그리고 대중에게 발표된 것이 1995년이지요. 루비는 오늘날 개발자들에게 가장 표현이 풍부하고 간결한 언어의 하나로서 자주 환영받습니다. 표현이 풍부하다는 의미를 정확하게 확인해봅시다. 신념을 가지고 중요한 내용만 전달하겠습니다.
오픈소스 이 언어의 공식적인 구현물은 GPL과 오픈소스 라이센스를 통해 자유소프트웨어로 배포됩니다. 만약 여러분들이 "오픈소스"가 뜻하는 바를 모른다면, 이렇게 생각하십시오. 마츠는 루비 인터프리터와 라이브러리를 모두 프로그램했으며, 그것을 사용하는 사람들에게 주었습니다. 소스코드를 사용할 수 있도록 함으로써 많은 사람들이 그것을 사용하고 개선합니다. 많은 사람들이 코드를 갖고 그것을 개선하면, 마츠(그리고 소스를 유지하는 개발팀)는 그들이 개선한 점을 통합하여 다시 주 소스코드에 반영합니다. 오픈소스의 이점은 대부분 프로젝트를 진행하면서 상용 프로젝트보다 많은 지지를 얻는다는 것입니다. (그리고 보통 사용하는데 자유스럽다는것입니다!)
다중 패러다임 기능적인 스타일인 Haskell 과 Scheme 상에서 코드를 작성하는 것을 좋아하십니까? 아주 좋아요. 루비도 그러합니다. 실제로 자바나 스몰토크와 같은 객체지향언어를 공부하나요? 문제없습니다. 루비는 그것 또한 다룹니다. Forth 나 Ada 같은 프로시저 (a.k.a. 명령) 스타일을 사용하는 것을 선호합니까? 루비는 다른 언어들만큼이나 "프로시저"도 얻을 수 있습니다. 이것들이 의미하는 바를 모르지만 그냥 프로그래밍하시길 원하신다고요? 루비는 하나의 프로그래밍 관점을 강요하지 않기 때문에 다중 패러다임 언어입니다. 여러분은 앞에서 말한 프로그램 패러다임들을 아무런 문제없이 루비에서 사용할 수 있습니다. 여러분은 여러분이 선호하는 (혹은 여러분이 배우기 쉬운) 것을 하나 선택할 수 있고, 그것으로 진행할 수 있습니다. 루비는 방해하지 않습니다. 몇몇 다른 언어들과 달리 시샘하지도 않고 객체를 떠나서 문법을 파괴했다고 오류를 보내주지도 않으며 대신 유사한 것을 대신하여 계속 진행하도록 결정합니다.
인터프리터 방식 만약 여러분이 어셈블리, 파스칼, 포트란, C/C++ 을 사용했었다면, 여러분들은 컴파일 방식의 언어를 사용했던 것입니다. "컴파일 방식" 은 여러분들이 작은 컴파일러를 통해서 여러분들이 실행할 코드를 생성해내는 것입니다. 운영체제에 의해 실행되는 것이 아닌 다른 컴퓨터 요소에 의해 수행될 순수한 코드의 정렬을 생성해냅니다. 이것은 여러분의 프로젝트가 커지면 커질수록 프로그램을 생성하는데 소요되는 시간도 커지며, 때때로 생산성에 있어서 심각한 장애가 될 수 있습니다. 아, 하지만 다른 방법이 있습니다. 루비는 인터프리터 방식의 언어입니다. 이것은 여러분의 코드를 읽는 인터프리터가 있으며, 운영체제에 대한 순수한 코드의 생성을 생략합니다. 아마도 이 그림이 여러분들의 이해에 더 도움이 될 것입니다.
![]() [JPG image (53.83 KB)] 그림.1: 루비가 프로그램들을 어떻게 다루는지에 대한 개요
좀 더 설명하자면 그림에서 예를 든 것은, 당신이 제프가 그의 상자에서 나오도록 설득하는 것이지만, 이건 일반적인 개념입니다. 코드를 실행해 들어가면, 루비는 그것을 모두 재생하고, 프로그램이 나타납니다. 루비 코드를 실행하는 방법으로 여러분은 몇몇 방법을 사용할 수 있습니다. 첫번째 방법은 여러분의 소스 코드를 갖는 파일을 만드는 것입니다. 그리고 루비 명령어 행에 루비 명령어 옵션으로 그 파일을 실행하도록 파일 이름을 루비에게 전달합니다. 다른 방법으로 여러분이 사용하는 편집기의 단축키를 사용하여 루비 실행기를 사용할 수 있습니다. 예를 들어, SciTE 는 F5 키를 누르는 것으로 이 요소를 사용할 수 있습니다. 마지막 방법은 irb 나 fxri 같은 대화방식의 쉘을 사용하는 것입니다. 이 쉘은 여러분들에게 루비 코드 행들을 입력하여 바로 실행할 수 있는 "루비 프롬프트"를 제공합니다. 저는 이 책을 쓰면서 광범위하게 irb 를 사용했습니다. 왜냐하면 파일로 실행하는 것보다 빠른 응답을 얻을 수 있기 때문입니다. 이 프롬프트들은 루비가 인터프리터에서 동적으로 실행되는 언어이기 때문에 가능한 것입니다.
루비의 번역된 내용은 루비를 훌륭하게 만들 많은 요소를 가지고 있습니다. 컴파일된 프로그램들은 인터프리터를 이용한 프로그램처럼 동적일 수 없습니다. 컴파일 된 프로그램들은 보통 실행시 코드나 응용프로그램 스스로를 변경할 수 없기 때문입니다. 인터프리터를 이용한 프로그램들은 원본 소스(혹은 아주 일부 컴파일 된 바이트 코드)로부터 단순하고 쉽게 해석될 수 있기 때문에 인터프리터를 이용한 프로그램들은 실행시에 더욱 풍성한 상호작동을 할 수 있습니다. 저희는 그 자체의 기능을 더욱 많이 발견할 수 있도록 모든 부분을 더 많이 토론할 것입니다. 이제 우리는 실제로 루비를 갖고 있는지 확인할 필요가 있습니다. 그렇지 않다면 이 요소들은 여러분들보다 더 빠르게 부는 바람을 쫓는 것과 같을 것입니다. 의미없는 것이죠!
0.2. 루비 설치하기 ¶때때로 프로그래밍 환경을 설치하는 것은 고통스러울 수 있습니다. 만약 여러분이 윈도우즈에서 GNU 컴파일러를 설치하려고 시도해보셨다면 제가 말하는 바가 무엇인지 아실것입니다. 운좋게도 루비는 대부분의 플랫폼에서 상대적으로 설치가 쉽습니다
Windows
윈도우즈에 설치하는것은 간단합니다.
![]() ![]() [PNG image (48.01 KB)] Fig. SciTE
루비 파일을 편집하기 위해서는, 텍스트 편집기만 있으면 됩니다. Notepad 만큼 간단하고 UltraEdit처럼 근사하면 장땡입니다. 루비는 하이라이트 기능과, Ruby 파일을 열고 저장하는 기능이 부여된 SciTE 라고 하는 에디터가 딸려나옵니다. 이 프로그램은 또한 프로그램을 실행하는데 있어 괜찮은 기능들이 있어 이런(...?)기능에 관한 한 명령줄에서 헤집고 어슬렁거릴 필요가 없습니다. 이것 말고도 루비를 개발하기 위한 다양한 프로그램들이 있습니다. (e.g. FreeRIDE, Arachno, Mondrian, etc.), 그러나 이 예로 든 프로그램들은 개발하는데 있어 불필요한 기능도 없지 않습니다. (그래서 필자는 그것들을 쓰지 않고 있습니다).
예:
ruby mycodefile.rb 이런 귀찮은 일을 회피하기 위해 SciTE를 쓰는 간단한 방법을 제안하지만 어떤 경우에는 이 편집기의 사용이 필요악일 수도 있습니다(특별하게 다른 편집기를 사용하는 것이 더 편하게 느껴진다면...).
Mac OS X
Jaguar (10.2) 이후 버전을 돌리고 있다면, 다른 버전의 루비를 이미 가지고 있을 것입니다. 만약 어떤 버전을 가지고 있는지 알고 싶다면 (1.8버전을 기반으로 하는 이 문서에서와 같이 호환되게 하고 싶다면)..., 터미널 창에 다음과 같이 입력하면 됩니다.:
ruby -v 이 명령으로 하여금 프로그램에서는 어떤 버전이 설치 되었는가를 간단하게 알려줍니다. 만약 1.8버전이 설치 되었다면 아주 좋습니다...? (무슨 근거로?.. 필자 주) 만약 그렇지 않다면, 1.8버전을 설치하도록 합니다.
루비를 설치하는 가장 쉬운 방법은 DarwinPorts (
![]() sudo port sync sudo port install ruby 몇몇 파일을 내려 받고, 몇몇 요소를 컴파일 하면서 처리되지 않은 파일에 대한 처리속도를 계산하고 나면... (장면에 대해서 감이 잡히시죠? 설치마법사 쯤 생각하시면 됩니다. 역자 주) 동작하는 루비를 갖게 됩니다! 단지 ruby -v 와 같은 간단한 명령이 실행되면 그걸로 끝입니다. 만약 실행되지 않는다면, Darwin 이식에 관한 웹사이트를 방문하고 지원항목과 메일링리스트에서 확인해보시기 바랍니다.
![]() [PNG image (24.25 KB)] Fig. Textmate
만약 간단한 환경을 선호한다면 Mac OSX에서의 루비파일 편집은 텍스트 편집기 같은 그 어떤 간단한 프로그램에서도 가능합니다. 만약 지금 개발환경에서 그 이상의 것을 필요로 한다면, TextMate와 같은 환경에서 당신의 재능을 맘껏 뽐내보일 수도 있습니다. (필자의 Mac 환경의 선택입니다...ㅋㅋㅋ). 만약 오직 유닉스가 아님 배째라식의 콘솔만 쓰는 고수라면 vi 나 emacs 에서 작업하는게 어쩌면 완벽할 것이며, 이것들 쓰는게 매우 마음에 내킨다면 대부분의 작업은 이 편집기들이 루비 개발환경에 있어 쓸만한 것들이 될 수 있으며 이것들로 하여금 모든 것을 끝장냅니다.
Linux
여러분들이 이미 설치된 루비를 가지고 있는지 여부를 확인하기 위해, 명령행에서 ruby -v 라고 입력해보십시오. 만약 리눅스가 루비를 찾을 수 없다면, 명령행에 which ruby 를 입력해보십시오. 만약 루비가 여러분의 시스템에 없다는 사실에 직면하게 된다면, 루비를 설치할 준비를 하십시오. 운좋게도, 루비는 리눅스를 다양하게 지원하며, 여러분들의 리눅스 사용환경에 따라 다르겠지만, 다음 중 한가지 방법으로 설치하셔야 할 것입니다.
Install from Administrator
여러분이 사용하는 컴퓨터의 관리자가 아니라면, 시스템 관리자의 자비를 구해야 할 것입니다. 당신을 위해 루비를 설치해달라고 그 혹은 그녀에게 애걸하십시오. 간식을 제공해주십시오. 만약 설치하지 않으면 책상에 오줌을 갈겨버리겠다고 말하십시오. 어떻게 해서든 루비를 설치하십시오.
Install from Package
패키지를 통해 설치하려면 배포문서를 참고할 필요가 있을 것입니다. 각각의 배포판 들은 각기 다른 방법으로 설치를 수행합니다만, 몇몇 리눅스 배포판에 패키지가 없다면, 추가적으로 받아야 할 것입니다. 우선, Dag's, Mind's, Shadoi's, 또는 Debian-Unofficial과 같은 비공식 배포사이트를 참조해보합니다. (아니면, 구글의 방대한 내용들이 궁금증을 해결해줄 것입니다). 만약 이런 방법으로 해결방법을 못찾겠다면...
Install from Source
소스로 설치를 하는 것은 어떤 사람들에게는 원초적 본능입니다. 약간의 더 나은 성능을 볼 수도 있다고 장담합니다만, 전 성격이 굉장히 불같아서 최대한 빨리 결과를 보고 싶어합니다. 저같은 경우는 단지 패키지를 다운 받아 떨구고 바로 실행합니다. 당신이 고통을 즐기는 편이거나 설치할 수 있는 패키지를 찾을 수 없다면, 소스로부터 설치하는 방법을 택할 수 있습니다. 먼저,
![]() tar -xvzf ruby-1.8.4.tar.gz cd ruby-1.8.4 디렉토리 안을 좀 살짜기 뒤져봅시다. 아마 license나 README를 읽고나서는 리눅스 배포환경에 맞는 원하는 해결방법이 나오지 않을 것입니다. 그러면 다음과 같이 환경을 설정하고 빌드하고 설치하도록 합니다.:
./configure make make install (아니... 이리 간단한 방법이 -_-;;)
여기까지 오셨다면 참 잘 오신 것입니다. ruby -v 라고 입력하여 잘 설치되었나 확인해봅니다.
리눅스에서의 루비 파일 편집은 자주 쓰는 텍스트 편집기를 사용하는 것 만큼 간단합니다. gEdit 나 여러분이 좋아하는 콘솔 편집기(예를 들어 vi, emacs, nano 등), X 윈도우 환경에서 쓸 수 있는 xemacs 등을 파일 편집에 사용합니다. 편집기뿐만이 아니라 jEdit 나 Arachno Ruby 와 같은 더욱 좋은 환경을 얻을 수는 있습니다만, 꼭 필요한 것은 아닙니다.
0.3. 그녀를 불러 봅시다! 앗흥~ =ㅂ=)/ ¶이제 Ruby에게 여기에 제시된 모든걸 해보라고 해봅시다. (어째 말이 -_-;; 이상...) irb나 fxri 를 사용하여 파일에 저장된 소스코드를 치거나 즉석에서 피드백을 얻을 수 있고 Ruby를 사용하여 실행할 수 있습니다. 만약 FM대로 사용하고 싶다면, 명령줄에서 irb를 입력하든지 fxri를 프로그램 그룹에서 찾으시면 됩니다. 간단하게 입력하고 실행하고 싶다면 그냥 일반적인 편집기에서 열고 서둘러 시작하시면 됩니다.
puts "Hello, world." 이 과정은 물론 대부분의 프로그래밍 서적에서 제일 먼저 소개 되는 예시입니다. 대화형 쉘 중 하나를 선택하여 사용하고 있다면 인터프리터를 통해 "Hello, world."를 보게 될 것입니다. 만약 파일 안에 이 한 문장을 넣었다면 hello.rb 와 같은 이름으로 저장을 하시고 ruby hello.rb 를 입력하여 실행해 보시기 바랍니다. 이제 좀 흥미로운걸 만들어 보도록 합시다.
puts "Hello, world. What is your name?" myname = gets() puts "Well, hello there " + myname + "." 파일을 다시 저장하고 이걸 다시 실행해봅니다(아니면 인터프리터에서 이걸 쳐봅니다). 인사말을 볼 수 있을 것이고, 이름을 물어볼 것입니다. 이름을 입력하고 나면 이름이 들어간 인사말을 볼 수 있을 것입니다. 이게 어떻게 동작하는지 정녕 이해를 못하시겠다구요? puts 는 콘솔상에 줄글을 뿌리는 것이고 gets는 사용자로 부터 줄글을 얻어내는 것입니다. 이제 루비의 일부를 허리춤에 꿰 찼습니다. 이제
![]() |
You love your home and want it to be beautiful. |