저자명 : 유구이(Yugui) 역자명 : 진명조 출판사 : 도서출판 ITC 정 가 : 18,000원 ISBN : 978-89-90758-42-2 원서명 : 初めての Ruby 출간년월 : 2009 년 2 월 페이지 : 276 쪽 크기 : 세로 : 245, 가로 : 188, 반양장
Ruby 창시자인 마츠모토 유키히로(일명, 마츠(Matz))가 강력 추천하는 이 책은 다른 언어로 프로그래밍을 한 경험이 있는 사람을 대상으로 Ruby의 특징, Ruby스러운 방법이나 관습에 대해 설명한다. 이는 Ruby에 관한 자료를 읽고 실제로 학습을 진행하기 위해 필요한 전제 지식이다. 이 책은 Ruby의 기초적인 부분과 메타클래스나 블록 구문과 같은 독자적인 개념, 이와 관련된 문화에 대해 설명하고 Ruby 특유의 사고방식을 익히는 것을 목표로 하고 있다. 이 책을 끝까지 읽고 나면 「Ruby 레퍼런스 매뉴얼」을 스스로 읽고 이해할 수 있고, 다양한 Ruby 라이브러리를 활용해서 자신의 힘으로 고도의 Ruby 프로그래밍을 습득하기 위한 기초지식을 손에 넣을 수 있을 것이다. 이 책은 Ruby 1.8과 1.9를 주로 다루고 있다.
이 책의 구성
1장에서는 Ruby의 전체적인 모습을 조감하고 있다. 이후 장에서 다룰 Ruby의 각 부분에 관한 내용을 가볍게 다룬다. 2장부터 5장까지는 배열, 해시, 숫자, 문자열, 입출력과 같은 Ruby의 기본적인 클래스군을 설정하고 있다. 또한 이를 통해 블록 구문이나 형변환과 같은 Ruby의 구조를 다루고 있다. 6장부터 8장까지는 지금껏 애매하게 다루었던 Ruby의 언어본체(문법)에 대해 좀 더 상세하게 설명하고 있다. 7장에서는 Ruby를 구조화하는 체계인 메소드에 대해 다양한 문법을 설명하고 있다. 8장에서는 클래스와 객체에 대해 다루고 있다. 마지막으로 9장에서는 이 책의 범주를 넘어서는 발전적인 주제에 관해 소개하고 있다. 또한 참조해야 할 핵심자료들도 마련되어 있다.
이 책의 대상 독자
이 책은 다른 언어로 프로그래밍을 경험한 적이 있는 프로그래머를 대상으로 하고 있다. 특히 C++, 자바, C#, 펄5, PHP5와 같은 언어로 객체지향 프로그래밍 경험이 있는 프로그래머에게 적합하다.
(중략)... Yugui 씨는 이 『입문자를 위한 루비』를 ‘Ruby를 처음 접하는 프로그래머를 위한 책’으로 명확히 정의하고, 레퍼런스 매뉴얼 수준으로 상세하고 깊게 설명하지 않으면서, 프로그래밍에 대해 어느 정도의 경험이 있는 사람이 Ruby를 접한다는 생각으로 Ruby의 세계를 여행하기 위해 필요한 정보를 컴팩트하게 정리해 놓았다. 또한 Ruby라는 언어를 특징짓는 ‘문화’에 관한 부분도 언급하려 노력했다. 결국, 프로그래밍 언어는, 어떤 기능이 있는지가 아니라 언어를 둘러싼 문화나, 언어 및 라이브러리 설계의 배후에 있는 철학에 의해 차별화되기 때문이다.
아무쪼록 이 책을 통해 가능한 많은 사람들이 Ruby의 세계에 발을 들이게 되어 프로그래밍의 기쁨을 느낄 수 있었으면 한다.
_Ruby 창시자, 마츠모토 유키히로(Matz)
옮긴이의 글 중에서
(중략)... 이 책은 다른 프로그래밍 언어를 다룬 경험이 있는 독자를 대상으로 하는 Ruby 입문서로, 저자는 Ruby의 기초 문법을 비롯해서 Ruby다운 사고방식과 문화까지 소개하고 있다. 이는 ‘프로그래머는 프로그래밍 언어와 싸울 필요가 없다. 프로그래밍 언어는 프로그래머에게 자연스럽게 느껴져야 한다.’라는 Ruby 창조자 Matz의 생각을 독자 여러분께 전달하고자 하는 의도로 생각한다.
Rails 열풍을 반영하듯 Rails 관련 서적은 국내에 다수 번역되었지만, 프로그래밍 언어로서의 Ruby를 소개하는 서적은 아직 드문 것이 사실이다. 그렇기 때문에 이 책이 Ruby 초심자를 위해 든든한 디딤돌이 될 수 있으리라 생각한다. ...(후략)
저자 소개 Yugui(유구이) 본명은 園田 裕貴(소노다 유우키). Ruby commiter, Ruby 1.9 계열 릴리즈 매니저. MtF-TS. 문서나 라이브러리의 일관성을 통해 ‘보다 알기 쉬운 Ruby’의 실현과 릴리즈 관리를 통해 ‘보다 안정된 Ruby’를 지향하고 있다.
2004년에 릿쿄대학교 이학부 수학과를 졸업하였고, 2006년에는 릿쿄대학교 이학연구과 박사 전기과정 중 중퇴하였다. 웹 관련 기업에서 개발업무에 종사한 이후, 2008년부터 프리랜서 프로그래머로 활동하고 있다. 개인 사이트는 http://yugui.jp이다.
역자 소개 진명조 고려대학교 재료공학부를 졸업하고 ㈜오늘과내일 연구소에서 근무하고 있다. 역서로는 『Binary Hacks : 해커가 전수하는 테크닉 100선』(2007), 『C언어로 배우는 알고리즘 입문』(2004)이 있다. 운영중인 개인 블로그에 테크니컬 컬럼을 기록하고 이후 이를 책으로 출간하고자 하는 포부를 갖고 있다.
1.1 Ruby의 특징 1 1.1.1 객체지향 언어 2 1.1.2 보다 나은 펄 4 1.1.3 동작하는 의사코드 5 1.1.4 ALGOL의 탈을 쓴 Lisp 6 1.2 인터프리터와 실행환경 10 1.2.1 버전 체계 11 1.2.2 구성 13 1.3 실행모델 15 1.3.1 동적성 17 1.3.2 실행 시 로드 17 1.3.3 가비지 콜렉션 18 1.4 인터프리터 실행 18 1.4.1 Hello, World! 19 1.4.2 대화형 실행환경 20 1.4.3 명령줄 디버거 21 1.5 문법과 기능 22 1.5.1 식과 구분자 23 1.5.2 화이트 스페이스(공백 문자) 23 1.5.3 입출력 24 1.5.4 제어식 25 1.5.5 블록 구문 26 1.5.6 객체지향 29 1.6 이 장의 정리 31 1.6.1 이 장에서 다루지 않는 것 32
Chapter 02 배열과 해시
2.1 배열 33 2.1.1 배열 생성 35 2.1.2 첨자참조 35 2.1.3 첨자대입 37 2.1.4 배열 비교 38 2.1.5 다양한 메소드 39 2.1.6 블록 구문 메소드와 iterator 40 2.2 해시 43 2.2.1 해시 생성 43 2.2.2 첨자 연산식 45 2.2.3 해시 비교 46 2.2.4 다양한 메소드 46 2.3 Enumerable 모듈 47 2.3.1 Enumerator 48 2.4 이 장의 정리 49 2.4.1 이 장에서 다루지 않는 것 50
Chapter 03 수치
3.1 수치 리터럴 51 3.1.1 정수 리터럴 52 3.1.2 부동소수점 리터럴 54 3.2 수치 연산 56 3.2.1 나눗셈 56 3.2.2 부호 조작 57 3.2.3 우선순위 57 3.2.4 그 밖의 수치 연산 57 3.2.5 형과 자동변환 58 3.3 비교 60 3.3.1 우주선 연산자 60 3.4 수학함수 61 3.5 비트 연산 62 3.5.1 부호와 비트 62 3.6 이 장의 정리 63 3.6.1 이 장에서 다루지 않는 것 64
Chapter 04 문자열
4.1 문자열 생성 66 4.1.1 문자열 리터럴 66 4.1.2 백슬래시 기법 67 4.1.3 식 전개 69 4.1.4 백쿼트 문자열 71 4.1.5 퍼센트 기법 71 4.1.6 Here Document 72 4.2 문자와 문자 리터럴 74 4.2.1 문자 리터럴 74 4.2.2 문자의 클래스 75 4.3 정규표현 76 4.3.1 정규표현 리터럴 77 4.3.2 오니구루마(鬼車, oniguruma) 80 4.4 부분문자열 접근 80 4.4.1 갱신 81 4.5 문자열 조작 82 4.5.1 반복 83 4.5.2 분해 83 4.5.3 비교 83 4.5.4 기타 84 4.6 iterator 84 4.7 포맷 85 4.8 심볼 86 4.8.1 심볼의 성질과 용도 87 4.9 Ruby 1.8과 멀티바이트 문자열 88 4.9.1 문자열 = 바이트열 88 4.9.2 $KCODE 대응 메소드 89 4.9.3 정규표현 90 4.9.4 문자열의 동치성 91 4.9.5 다국어 대응 91 4.10 Ruby 1.9와 멀티바이트 문자열 92 4.10.1 Encoding 92 4.10.2 매직 코멘트 93 4.10.3 내부 표현 93 4.10.4 문자열 결합 95 4.10.5 문자열의 동치성 95 4.11 이 장의 정리 96 4.11.1 이 장에서 다루지 않는 것 97
Chapter 05 입출력
5.1 프로그램 매개변수 99 5.2 파일 100 5.2.1 파일 모드 101 5.2.2 iterator 103 5.2.3 랜덤 엑세스 104 5.2.4 수동으로 리소스 관리 105 5.3 표준입출력 106 5.4 기타 입출력 객체 107 5.4.1 ARGF 107 5.4.2 StringIO 108 5.5 인코딩 109 5.5.1 외부 인코딩 109 5.5.2 내부 인코딩 110 5.6 이 장의 정리 111 5.6.1 이 장에서 다루지 않는 것 112
Chapter 06 변수와 식
6.1 변수 113 6.1.1 참조 114 6.1.2 변수의 종류 115 6.1.3 지역변수 116 6.1.4 인스턴스 변수 118 6.1.5 클래스 변수 118 6.1.6 전역변수 118 6.1.7 상수 119 6.1.8 의사변수 120 6.1.9 식별자와 변수명 121 6.2 연산자 122 6.2.1 재정의 가능한 연산자 123 6.2.2 재정의 불가능한 연산자 126 6.2.3 논리 연산자 128 6.2.4 범위 연산자 131 6.2.5 조건 연산자 132 6.3 제어식 132 6.3.1 if식 133 6.3.2 case식(#1) 135 6.3.3 case식(#2) 137 6.3.4 while식 138 6.3.5 for식 139 6.3.6 iterator 140 6.3.7 탈출 140 6.4 예외처리 142 6.4.1 rescue 수식자 143 6.4.2 raise 143 6.5 대역탈출 144 6.6 이 장의 정리 145 6.6.1 이 장에서 다루지 않는 것 145
Chapter 07 메소드
7.1 메소드 호출 147 7.1.1 괄호 생략 148 7.1.2 메소드 체인 148 7.1.3 수신자의 생략 149 7.1.4 매개변수 전개 151 7.2 메소드 정의 152 7.2.1 def식 152 7.2.2 return 153 7.2.3 디폴트 값 155 7.2.4 가변길이 매개변수 156 7.3 블록 구문 메소드 157 7.3.1 클로저로서의 블록 158 7.3.2 블록 매개변수와 블록 지역변수 160 7.3.3 블록 구문 메소드의 정의 162 7.3.4 Proc 165 7.4 이 장의 정리 166 7.4.1 이 장에서 다루지 않는 것 167
Chapter 08 객체와 클래스
8.1 클래스 정의 170 8.1.1 상속 170 8.1.2 인스턴스 메소드의 정의 171 8.1.3 클래스 메소드의 정의 171 8.1.4 인스턴스화 172 8.1.5 속성 173 8.1.6 클래스 정의 추가 175 8.1.7 슈퍼 클래스 호출 177 8.2 변수와 상수 178 8.2.1 인스턴스 변수 178 8.2.2 클래스 변수 179 8.2.3 상수 180 8.3 접근권한 181 8.4 싱글톤 메소드와 싱글톤 클래스 183 8.4.1 싱글톤 메소드 183 8.4.2 싱글톤 클래스 185 8.4.3 클래스 메소드와 메타 클래스 186 8.5 모듈 188 8.5.1 Mix-in 188 8.5.2 이름공간 192 8.6 메소드 탐색 192 8.6.1 오버로드의 불능성 194 8.7 이 장의 정리 195 8.7.1 이 장에서 다루지 않는 것 196
Chapter 09 이 책을 넘어서
9.1 RubyGems 197 9.1.1 주요 명령어 198 9.1.2 추천 Gems 199 9.2 네트워크 200 9.3 데이터베이스 201 9.4 이미지 201 9.5 GUI 202 9.6 Ruby의 Black Magic 204 9.6.1 eval 계열 205 9.6.2 method_missing 207 9.6.3 set_trace_func 208 9.6.4 계속 구문 208 9.7 Ruby의 정보원 209 9.7.1 레퍼런스 210 9.7.2 레포지토리 210 9.7.3 서적 210 9.8 커뮤니티 211 9.8.1 그룹 211 9.8.2 메일링 리스트 212 9.8.3 IRC 212 9.8.4 뉴스그룹 212 9.8.5 이벤트 212 9.8.6 그 밖의 웹사이트 213
Appendix A 인터프리터 설치
A.1 버전 선택 215 A.2 마이크로소프트 윈도우즈 216 A.2.1 Ruby-1.9.0-1 윈도우 인스톨러 패키지 217 A.3 Mac OS X 218 A.3.1 MacPorts 218 A.3.3 기타 219 A.4 GNU/Linux 219 A.5 소스코드로부터 설치 220 A.5.1 다운로드 220 A.5.2 설치 220 A.6 RubyGems 221 A.7 기타 222
컴퓨터 관련 서적을 다루는 서점에 가보면 어디서든 ‘첫 ○○’라는 제목의 책을 다수 발견하게 된다. 여기서 ‘○○’ 부분에는 다양한 프로그래밍 언어 이름이 들어간다.
이 책 "첫 Ruby"도 그중 한 권이 되었다.
오라일리 재팬에는 『Learning ○○』라는 오라일리 서적에 대해 『첫 ○○』라고 제목을 붙이는 관습이 있으므로 『Learning Ruby』의 번역본인 이 책에 그렇게 이름을 붙이는 것은 당연한 것이다(출판사주_번역서는 『첫 루비』가 아닌 보시다시피 『입문자를 위한 루비』다).
일설에 의하면 『Learning Ruby』의 번역을 의뢰받은 Yugui 씨는 ‘나라면 더 나은 책을 쓸 수 있겠다.’라고 생각하고 집필에 몰두한 끝에 나온 결과가 이 책이라고 한다. 어떤 의미에서는 일본 Ruby계에 인재층이 두텁다는 것을 상징하는 일인 것이다.
비록 거리에 범람하고 있는 『첫 ○○』라는 언어 책들이 있지만 그중 상당수가 결점을 지니고 있다. 이는 「첫」이라고 하는 단어가 무엇을 의미하는지 저자 자신조차도 명확히 하지 못하고 있기 때문이다. 그 책이 ‘프로그래밍을 처음 하는 사람에게 언어를 가르쳐주는 책’인지, 혹은 ‘프로그래밍은 어느 정도 알고 있지만, 그 언어에 대해 처음 배우려는 사람을 위한 책’인지 이에 대한 태도가 명확하지 않기 때문에 한 권의 책 속에서도 어떤 부분은 필요이상으로 쉽게 (또는 빙 둘러서), 또 다른 부분에서는 반대로 초심자가 거의 이해할 수 없을 정도로 어렵게 설명하는 것을 종종 발견하게 된다.
그런 점에서 이 책은 전혀 흔들림이 없다. Yugui 씨는 이 『입문자를 위한 루비』를 ‘Ruby를 처음 접하는 프로그래머를 위한 책’으로 명확히 정의하고, 레퍼런스 매뉴얼 수준으로 상세하고 깊게 설명하지 않으면서, 프로그래밍에 대해 어느 정도의 경험이 있는 사람이 Ruby를 접한다는 생각으로 Ruby의 세계를 여행하기 위해 필요한 정보를 컴팩트하게 정리해 놓았다. 또한 Ruby라는 언어를 특징짓는 ‘문화’에 관한 부분도 언급하려 노력했다. 결국, 프로그래밍 언어는, 어떤 기능이 있는지가 아니라 언어를 둘러싼 문화나, 언어 및 라이브러리 설계의 배후에 있는 철학에 의해 차별화되기 때문이다.
아무쪼록 이 책을 통해 가능한 많은 사람들이 Ruby의 세계에 발을 들이게 되어 프로그래밍의 기쁨을 느낄 수 있었으면 한다.
Happy Hacking!
Ruby 창시자, 마츠모토 유키히로(Matz)
머리말
이 책은 타 언어 프로그래머를 위한 Ruby 입문서다. Ruby 1.8 및 1.9를 주로 다루고 있다. 또한 필자가 8년 동안의 Ruby를 경험해오며 관측한 Ruby의 문화, 관습에 대해서도 기술하고 있다1).
다수의 자리잡은 프로그래밍 언어와 마찬가지로 Ruby는 Ruby 특유의 세계관을 지니고 있다. 필자는 자바(Java)로 프로그래밍할 때는 자연스레 자바처럼 생각하게 된다. 변수의 형, 자바로서 자연스러운 API, 아키텍처를 생각한다. 펄(Perl)의 세계관은 강렬한 체험이었다. 펄로 프로그램을 작성할 때는 스칼라(scalar)와 리스트(list)에 대해 공기를 마시듯이 자연스럽게 사고(思考)하고 CPAN의 생태계 상에서 설계하게 된다. 마찬가지로 Ruby를 능숙하게 사용하려면 Ruby의 문법만 알아서는 안 된다. Ruby답게 생각해야만 한다.
Ruby에 관한 오래된 문구 중에는 ‘놀라운 최소의 법칙’이라는 게 있다. Ruby 커뮤니티에서 막연히 공유되고 있는 Ruby다운 사고방식으로, Ruby는 이 생각에 비추어 자연스럽게 행동해야 한다는 것이다. Ruby 문법을 정할 때, Ruby 표준 라이브러리의 기능을 결정할 때, 메일링리스트에서는 항상 이 말이 화제가 되었다2). 따라서, Ruby스럽게, Ruby 프로그래머답게 생각한다면 독자는 순식간에 Ruby에 익숙해질 것이다. 라이브러리 기능 하나를 찾더라도 Ruby 프로그래머라면 어디를 찾을지, 어떻게 호출할지를 자연스럽게 알 수 있게 되기 때문이다. 이상적으로는 당신이 생각하는 대로 작성하면 생각대로 작동할 것이다.
이 책의 대상독자
이 책은 다른 언어로 프로그래밍을 경험한 적이 있는 프로그래머를 대상으로 하고 있다. 특히 C++, 자바, C#, 펄5, PHP5와 같은 언어로 객체지향 프로그래밍 경험이 있는 프로그래머에게 적합하다. 이 책은 「Ruby 레퍼런스 매뉴얼」3)을 읽고 충분히 이해할 수 있을 정도의 Ruby 기초지식을 제공한다.
프로그래머로서 Ruby를 학습하기 위한 최고의 교재는 「Ruby 레퍼런스 매뉴얼」이다. 여기에는 Ruby의 모든 것이 쓰여있다4). Ruby를 배우려고 하는 사람은 이 매뉴얼을 읽어야 한다.
주. 1) 이 책은 오라일리 재팬의 관례에 반해서 『Learning Ruby』 (O’Reilly Media)의 번역본이 아니다. 일본인이 집필한 일본 서적 단행본이다. 2) 남용으로 인해 지금은 ‘놀라운 최소의 법칙’가 금지어가 되었다는 것이 안타깝다. ‘내가 알고 있는 ○○언어와 똑같이 동작하므로 내게는 놀랍지 않다.’라고 착각한 사람이 상당히 많았다. 3) http://www.ruby-lang.org/ja/man/ 4) 불완전한 부분도 있지만, 「Ruby 레퍼런스 매뉴얼 쇄신계획」 (http://doc.loveruby.net)에 따라 개선되고 있다.
하지만, 레퍼런스 매뉴얼에는 한 가지 문제가 있다. 이는 Ruby의 독특한 방식을 알고 있는 사람에게 적합하도록 쓰여졌다는 것이다. Ruby 프로그래머가 일상적인 조사에도 사용한 자료이므로 그리 길지 않은 것은 당연하지만, 처음 배우려는 사람에게는 커다란 장벽이다. 필자도 Ruby를 처음 익히려고 할 당시에는 의미를 모르는 부분이 많이 있었다. 예를 들면, File.chmod와 File#chmod는 어떻게 의미가 다를까?
레퍼런스 매뉴얼을 제대로 이해하기 위해 알아둬야 할 것은 Ruby 특유의 개념1), 기법 그리고 Ruby의 사고방식이다. 이 책은 Ruby의 기초적인 부분과 메타 프로그래밍 구분과 같은 특유의 개념, 이와 연관된 문화를 설명하고 있다. 이를 통해 Ruby의 사고방식을 알려주려고 노력했다. 이 책을 끝까지 읽으면, 독자는 레퍼런스 매뉴얼을 스스로 이해하고 Ruby 라이브러리를 활용한 고도의 프로그래밍을 익힐 준비를 할 수 있게 될 것이다.
한편, 이 책에는 컴퓨터 과학 일반에 관한 화제나 객체지향 자체에 대한 설명은 거의 포함되어 있지 않다. 책 끝부분에 간단한 용어집이 있는 정도다. 이런 주제에 관한 상세한 설명은 다른 관련서적들을 참조하기 바란다.
프로그래밍 초보자에게
이 책을 쓰면서 두 가지 선택의 길이 있었다. 프로그래밍 초보자를 대상으로 할 것인지, 아닌지. 필자는 후자를 선택했다. 이 책은 프로그래밍을 배운 적이 있는 사람을 위한, Ruby라는 언어 입문서다. 프로그래밍 자체에 대한 설명은 극히 한정적이다.
프로그래밍 자체에 대한 사고방식을 익히는 데에는 한 가지 문제가 있다. 특정 프로그래밍 언어 하나를 소재로 해야만 프로그래밍을 익힐 수 있다는 것이다. 한편, 수많은 프로그래밍 언어는 현실의 복잡한 문제를 지원하기 위해 다양한 기능을 갖고 있는데, 언어의 기능과 프로그래밍이라는 사고방식 두 가지를 동시에 익히기는 어렵다.
이런 점에서 Ruby의 문법은 비교적 우수하며, 접속, 분기, 반복, 변수, 서브루틴 등의 개념을 심플하게 나타낼 수 있다. 문법이 심플하므로 사소한 일에 고민할 필요 없이 프로그래밍 본질적인 부분을 학습할 수 있다. 이 때문에 Ruby는 프로그래밍 학습에 적합한 언어이다.
그러나 나는 이 책을 프로그래밍 초심자를 위해 쓰지는 않았다. 한 가지 이유는, Ruby를 소재로 한 좋은 프로그래밍 입문서인 『첫 프로그래밍(初めてのプログラミング)』 (오라일리 재팬)이 이미 존재하기 때문이다. 다른 한 가지 이유는, 현실의 복잡한 문제를 해결하고자 하는 프로그래머를 위해 Ruby를 소개하고자 했기 때문이다.
주. 1) 독자가 알고 있는 C++이나 자바, C#에는 없는 개념.
이 책의 구성
1장에서는 Ruby 전체적인 모습을 조감하고 있다. 이후 장에서 다룰 Ruby의 각 부분에 관한 내용을 가볍게 다룬다. 2장부터 5장까지는 배열, 해시, 숫자, 문자열, 입출력과 같은 Ruby의 기본적인 클래스군을 설정하고 있다. 또한 이를 통해 블록 구문이나 형변환과 같은 Ruby의 구조를 다루고 있다. 6장부터 8장까지는 지금껏 애매하게 다루었던 Ruby의 언어본체(문법)에 대해 좀 더 상세하게 설명하고 있다. 7장에서는 Ruby를 구조화하는 체계인 메소드에 대해 다양한 문법을 설명하고 있다. 그리고 8장에서는 클래스와 객체에 대해 다루고 있다. 9장에서는 이 책의 범주를 넘어서는 발전적인 주제에 관해 소개하고 있다. 또한 참조해야 할 핵심자료들도 마련되어 있다.
이 책에서 사용하는 표기에 대해
이 책에는 다음과 같은 문자 포맷을 사용하고 있다.
고딕 처음 나온 용어, 의미 강조를 나타낸다.
고정폭 폰트 (Constant width) 클래스명, 메소드명, 변수명을 나타낸다. 또한 코드 샘플에도 사용된다.
고정폭 굵은 폰트 (Constant width Bold) 사용자가 실제로 입력할 부분을 나타낸다.
문의처 이 책의 내용에 만전을 기했지만 제작과정상의 오류가 있을 수 있을 것이다. 또는 Ruby 버전업에 따라 이 책을 집필한 후에 사양이 변경될 수도 있다. 특히 Ruby 1.9에 대해서는 충분히 있을 수 있는 일이다.
무엇보다도 우선, 이 책을 손에 넣게 되신 독자 여러분께 감사의 말을 전하고 싶다. 하지만 또한 많은 분들의 도움이 없었다면 이 책이 햇볕을 보지 못했을 것이다. 그분들께도 감사드린다.
먼저, 편집자인 타카 케이코 씨께는 이 책을 기획할 수 있는 기회와 많은 조언을 주었다. 찻집인 ‘밀키웨이’에서 이 책을 구성하고 있을 때 장시간 동안 앉아있는 필자를 쫓아내지 않은 ‘밀키웨이’ 사장님에게도 감사드린다.
또한 이 책의 편집단계에서는 아래와 같이 여러분들께 리뷰를 부탁했다. 다양한 기술적인 실수를 지적해주었고, 또한 구성상의 충고도 아낌없이 해주었다. 이분들의 가르침이 없었다면 이 책의 품질이 매우 낮아졌을 것이다. 진심으로 감사드린다.
• ActiveScript Ruby의 저자로 많은 기술서적으로 알려진 arton 님 • Ruby의 문자 인코딩 문제에 큰 공헌을 하신 Martin Dürst 교수님 • 애자일 개발과 Ruby의 선도적 실적자이자 에반젤리스트인 카쿠타니 노부타로 님 • Ruby 1.9의 가상머신 제작자인 사사다 코우이치 님 • JRuby 전문가 타카이 나오토 님 • 일본 Ruby 모임 회장이자 『재미있는 Ruby』 저자인 타카하시 마사요시 님 • tDiary 제작자로 일본에 Ruby 보급을 이루어낸 타다 타다시 님 • Ruby 인터프리터의 세세한 거동을 모두 알고 있는 커미터(committer)인 타나카 사토시 님 • 다언어화로 활약하고 있는 Ruby 커미터인 나루세 유이 님 • Rails 입문서 명저자, 『Ruby on Rails 입문』의 저자인 니시 카즈노리 님 • StarRuby 제작자인 호시 하지메 님 • 도쿄의 Rails 기술자 커뮤니티를 이끄는 모로하시 쿄우스케 님 • 게임 프로그래밍의 Ruby 응용 전문가인 야마모토 단 님
마지막으로, 생각과 컴퓨터를 잇는 멋진 세계관을 완성시켜준 Ruby 언어 디자이너이자 창시자인 Matz – 마츠모토 유키히로 님께 감사드린다.
Yugui
저자 소개 Yugui(유구이) 본명은 園田 裕貴(소노다 유우키). Ruby commiter, Ruby 1.9 계열 릴리즈 매니저. MtF-TS. 문서나 라이브러리의 일관성을 통해 ‘보다 알기 쉬운 Ruby’의 실현과 릴리즈 관리를 통해 ‘보다 안정된 Ruby’를 지향하고 있다.
2004년에 릿쿄대학교 이학부 수학과를 졸업하였고, 2006년에는 릿쿄대학교 이학연구과 박사 전기과정 중 중퇴하였다. 웹 관련 기업에서 개발업무에 종사한 이후, 2008년부터 프리랜서 프로그래머로 활동하고 있다. 개인 사이트는 http://yugui.jp 이다.
Ruby는 펄의 유연함과 파이썬의 객체지향성을 보다 강화하고자 하는 의도로 마츠모토 유키히로(Matz)에 의해 1993년부터 개발된 프로그래밍 언어로, 1995년에 첫 공개버전이 릴리즈되었다. Ruby라는 이름은 펄(Perl)≒진주(Pearl)에서 착안해서 보석류의 이름을 생각하다가 떠오른 것이라고 한다.
2006년, 「15분만에 블로그 만들기」와 같은 동영상이 인터넷상에 널리 퍼지면서 웹 개발자들 사이에서 Ruby on Rails가 크게 관심을 끌게 되었다. 이와 함께 개발언어 및 웹 애플리케이션 프레임워크 간 실행 및 개발속도 등의 성능비교 논쟁도 종종 일어났다. 이를 계기로 차츰 웹 개발자들은 Ruby라는 프로그래밍 언어에 흥미를 갖게 되고 이 언어가 지닌 능력에 주목하게 되었다.
역자도 마찬가지로 Rails 열풍을 통해 Ruby를 처음 알게 되었지만, 관심을 갖게 된 것은 의외로 시스템 관리 서적을 통해서다. 유닉스 시스템 관리 스크립트용 대표 스크립트 언어라면 셸스크립트와 펄을 꼽을 수 있는데, 최근 유닉스 계열 시스템 관리 서적을 살펴보면 차츰 Ruby가 그 영역을 넓혀가는 것을 실감하게 된다.
2008년 12월 현재, 프로그래밍 언어의 대중성을 나타내는 지표 중 하나인 TIOBE Index역주1)에 따르면, 100개 이상의 프로그래밍 언어 중에 Ruby(11위)는 PHP(4위), 파이썬(7위), 펄(8위) 등의 인터프리터 언어와 어깨를 나란히 하는 반열에 이미 올라와 있음을 알 수 있다.
이 책은 다른 프로그래밍 언어를 다룬 경험이 있는 독자를 대상으로 하는 Ruby 입문서로, 저자는 Ruby의 기초 문법을 비롯해서 Ruby다운 사고방식과 문화까지 소개하고 있다. 이는 ‘프로그래머는 프로그래밍 언어와 싸울 필요가 없다. 프로그래밍 언어는 프로그래머에게 자연스럽게 느껴져야 한다.’라는 Ruby 창조자 Matz의 생각을 독자 여러분께 전달하고자 하는 의도로 생각한다.
Rails 열풍을 반영하듯 Rails 관련 서적은 국내에 다수 번역되었지만, 프로그래밍 언어로서의 Ruby를 소개하는 서적은 아직 드문 것이 사실이다. 그렇기 때문에 이 책이 Ruby 초심자를 위해 든든한 디딤돌이 될 수 있으리라 생각한다. 혹 다른 프로그래밍 언어에 능숙해서 Ruby를 접할 이유를 찾지 못하는 독자가 있다면, 2001년 Matz의 한 인터뷰역주2)에서 그 해답을 제시해보고자 한다.
Q : 펄이나 파이썬에 익숙한 사람이 개발언어를 Ruby로 바꿔야 할 이유는 뭘까요? A : 굳이 바꿀 이유가 있을까요? 펄이나 파이썬에 만족한다면 그럴 필요가 없습니다. 하지만 만일 더 나은 언어의 필요성을 느낀다면 Ruby를 선택할 수 있을 것입니다. 새로운 프로그래밍 언어를 배운다고 해서 해가 되지는 않습니다. 오히려 새로운 생각과 식견을 얻을 수 있습니다. 바꾸려 하지 말고 그저 배우고 시도해보세요. 그것만으로도 Ruby는 충분히 편안함을 가져다 줄 것입니다.
Happy Learning!
최대한 마감을 지키며
진명조 :)
역자 소개 진명조 고려대학교 재료공학부를 졸업하고 ㈜오늘과내일 연구소에서 근무하고 있다. 역서로는 『Binary Hacks : 해커가 전수하는 테크닉 100선』(2007), 『C언어로 배우는 알고리즘 입문』(2004)이 있다. 운영중인 개인 블로그에 테크니컬 컬럼을 기록하고 이후 이를 책으로 출간하고자 하는 포부를 갖고 있다.