러스트 프로그래밍 공식 가이드 (러스타시안 커뮤니티가 직접 만든 RUST 2021 공식 가이드북 | 2 판)
Description
러스트 입문에 필요한 단 한 권의 책 ‘The Book’
러스트 공식 가이드북의 러스트 2021 버전의 한국어판이다. 초판과 달리, 한국 커뮤니티에서 문서 번역을 주도했던 권지용(rinthel)이 새로 번역했다. 함수 생성, 데이터 구조 선택, 변수 바인딩 같은 기본 개념을 확실히 익힌 후에 소유권, 트레이트, 스마트 포인터, 멀티스레딩, 카고, 문서화, 테스트, 패턴 매칭 등 좀 더 고급 개념들도 자세히 살펴본다. 러스트가 왜 개발자들에게 사랑받는지, 그리고 러스트를 배울 때 책을 딱 한 권만 꼽으라면 왜 이 책이 꼽히는지, 읽어보면 이유를 알 수 있다.
저자

스티브 클라브닉, 캐롤 니콜스

(Steve Klabnik)

모질라의 러스트 커뮤니티 팀 리더로서 공식적인 러스트 커뮤니티 문서를 담당하고 있고 신뢰받는 러스트 커뮤니티 애드버킷이기도 하다. 콘퍼런스에 발표자로 자주 참가하며, 루비 온 레일즈 프로젝트의 최다 기여자 중 한 명이다.

목차

지은이·감수자·옮긴이 소개 xvi
옮긴이 머리말 xvii
베타리더 후기 xix
추천사 xxi
추천 서문 xxii
서문 xxiv
감사의 글 xxv
이 책에 대하여 xxvi

CHAPTER 1 시작해봅시다 1
1.1 러스트 설치 1
__1.1.1 rustup 설치(리눅스 및 macOS) 2
__1.1.2 rustup 설치(윈도우) 3
__1.1.3 트러블슈팅 3
__1.1.4 업데이트 및 삭제 4
__1.1.5 로컬 문서 4
1.2 Hello, World! 5
__1.2.1 프로젝트 디렉터리 생성하기 5
__1.2.2 러스트 프로그램 작성하고 실행하기 6
__1.2.3 러스트 프로그램 뜯어보기 6
__1.2.4 컴파일과 실행은 별개의 과정입니다 8
1.3 카고를 사용해봅시다 9
__1.3.1 카고로 프로젝트 생성하기 10
__1.3.2 카고로 프로젝트를 빌드하고 실행하기 11
__1.3.3 릴리스 빌드 생성하기 13
__1.3.4 관례로서의 카고 14
정리 14

CHAPTER 2 추리 게임 17
2.1 새로운 프로젝트 준비하기 18
2.2 추릿값 처리하기 19
__2.2.1 변수에 값 저장하기 20
__2.2.2 사용자 입력 받기 21
__2.2.3 Result 타입으로 잠재적 실패 다루기 22
__2.2.4 println! 자리표시자를 이용한 값 출력하기 24
__2.2.5 첫 번째 부분 테스트하기 25
2.3 비밀번호 생성하기 25
__2.3.1 크레이트를 사용하여 더 많은 기능 가져오기 25
__2.3.2 임의의 숫자 생성하기 29
2.4 비밀번호와 추릿값 비교하기 31
2.5 반복문을 이용하여 여러 번의 추리 허용하기 35
__2.5.1 정답을 맞힌 후 종료하기 36
__2.5.2 잘못된 입력값 처리하기 37
정리 40

CHAPTER 3 일반적인 프로그래밍 개념 41
3.1 변수와 가변성 42
__3.1.1 상수 44
__3.1.2 섀도잉 45
3.2 데이터 타입 47
__3.2.1 스칼라 타입 48
__3.2.2 복합 타입 52
3.3 함수 57
__3.3.1 매개변수 58
__3.3.2 구문과 표현식 60
__3.3.3 반환값을 갖는 함수 62
3.4 주석 65
3.5 제어 흐름 66
__3.5.1 if 표현식 66
__3.5.2 반복문을 이용한 반복 71
정리 76

CHAPTER 4 소유권 이해하기 79
4.1 소유권이 뭔가요? 79
__4.1.1 소유권 규칙 81
__4.1.2 변수의 스코프 81
__4.1.3 String 타입 82
__4.1.4 메모리와 할당 83
__4.1.5 소유권과 함수 90
__4.1.6 반환값과 스코프 91
4.2 참조와 대여 92
__4.2.1 가변 참조자 95
__4.2.2 댕글링 참조 98
__4.2.3 참조자 규칙 100
4.3 슬라이스 타입 100
__4.3.1 문자열 슬라이스 103
__4.3.2 그 외 슬라이스 108
정리 109

CHAPTER 5 구조체로 연관된 데이터 구조화하기 111
5.1 구조체 정의 및 인스턴스화 111
__5.1.1 필드 초기화 축약법 사용하기 114
__5.1.2 기존 인스턴스를 이용해 새 인스턴스를 만들 때 구조체 업데이트 문법 사용하기 114
__5.1.3 명명된 필드 없는 튜플 구조체를 사용하여 다른 타입 만들기 116
__5.1.4 필드가 없는 유사 유닛 구조체 116
5.2 구조체를 사용한 예제 프로그램 119
__5.2.1 튜플로 리팩터링하기 120
__5.2.2 구조체로 리팩터링하여 코드에 더 많은 의미를 담기 120
__5.2.3 트레이트 파생으로 유용한 기능 추가하기 122
5.3 메서드 문법 126
__5.3.1 메서드 정의하기 126
__5.3.2 더 많은 매개변수를 가진 메서드 129
__5.3.3 연관 함수 130
__5.3.4 여러 개의 impl 블록 131
정리 132

CHAPTER 6 열거형과 패턴 매칭 133
6.1 열거형 정의하기 133
__6.1.1 열거형 값 134
__6.1.2 Option 열거형이 널값보다 좋은 점들 139
6.2 match 제어 흐름 구조 142
__6.2.1 값을 바인딩하는 패턴 144
__6.2.2 Option를 이용하는 매칭 145
__6.2.3 match는 철저합니다 147
__6.2.4 포괄 패턴과 _ 자리표시자 148
6.3 if let을 사용한 간결한 제어 흐름 150
정리 152

CHAPTER 7 커져가는 프로젝트를 패키지, 크레이트, 모듈로 관리하기 153
7.1 패키지와 크레이트 154
7.2 모듈을 정의하여 스코프 및 공개 여부 제어하기 158
7.3 경로를 사용하여 모듈 트리의 아이템 참조하기 160
__7.3.1 pub 키워드로 경로 노출하기 163
__7.3.2 super로 시작하는 상대 경로 166
__7.3.3 구조체, 열거형을 공개하기 167
7.4 use 키워드로 경로를 스코프 안으로 가져오기 169
__7.4.1 보편적인 use 경로 작성법 171
__7.4.2 as 키워드로 새로운 이름 제공하기 173
__7.4.3 pub use로 다시 내보내기 173
__7.4.4 외부 패키지 사용하기 174
__7.4.5 중첩 경로를 사용하여 대량의 use 나열을 정리하기 175
__7.4.6 글롭 연산자 176
7.5 별개의 파일로 모듈 분리하기 177
정리 179

CHAPTER 8 일반적인 컬렉션 181
8.1 벡터에 여러 값의 목록 저장하기 182
__8.1.1 새 벡터 만들기 182
__8.1.2 벡터 업데이트하기 183
__8.1.3 벡터 요소 읽기 183
__8.1.4 벡터값에 대해 반복하기 186
__8.1.5 열거형을 이용해 여러 타입 저장하기 187
__8.1.6 벡터가 버려지면 벡터의 요소도 버려집니다 188
8.2 문자열에 UTF - 8 텍스트 저장하기 188
__8.2.1 문자열이 뭔가요? 189
__8.2.2 새로운 문자열 생성하기 189
__8.2.3 문자열 업데이트하기 191
__8.2.4 문자열 내부의 인덱싱 193
__8.2.5 문자열 슬라이싱하기 196
__8.2.6 문자열에 대한 반복을 위한 메서드 197
__8.2.7 문자열은 그렇게 단순하지 않습니다 198
8.3 해시 맵에 서로 연관된 키와 값 저장하기 198
__8.3.1 새로운 해시 맵 생성하기 199
__8.3.2 해시 맵의 값 접근하기 199
__8.3.3 해시 맵과 소유권 200
__8.3.4 해시 맵 업데이트하기 201
__8.3.5 해시 함수 204
정리 204

CHAPTER 9 에러 처리 207
9.1 panic!으로 복구 불가능한 에러 처리하기 208
__9.1.1 panic! 백트레이스 이용하기 209
9.2 Result로 복구 가능한 에러 처리하기 212
__9.2.1 서로 다른 에러에 대해 매칭하기 214
__9.2.2 에러 전파하기 217
9.3 panic!이냐, panic!이 아니냐, 그것이 문제로다 224
__9.3.1 예제, 프로토타입 코드, 그리고 테스트 225
__9.3.2 여러분이 컴파일러보다 더 많은 정보를 가지고 있을 때 225
__9.3.3 에러 처리를 위한 가이드라인 226
__9.3.4 유효성을 위한 커스텀 타입 생성하기 228
정리 230

CHAPTER 10 제네릭 타입, 트레이트, 라이프타임 231
10.1 함수로 추출하여 중복 없애기 232
10.2 제네릭 데이터 타입 235
__10.2.1 제네릭 함수 정의 235
__10.2.2 제네릭 구조체 정의 238
__10.2.3 제네릭 열거형 정의 240
__10.2.4 제네릭 메서드 정의 241
__10.2.5 제네릭 코드의 성능 243
10.3. 트레이트로 공통된 동작 정의하기 244
__10.3.1 트레이트 정의하기 245
__10.3.2 특정 타입에 트레이트 구현하기 246
__10.3.3 기본 구현 248
__10.3.4 매개변수로서의 트레이트 250
__10.3.5 트레이트를 구현하는 타입을 반환하기 253
__10.3.6 트레이트 바운드를 사용해 조건부로 메서드 구현하기 254
10.4 라이프타임으로 참조자의 유효성 검증하기 256
__10.4.1 라이프타임으로 댕글링 참조 방지하기 256
__10.4.2 대여 검사기 258
__10.4.3 함수에서의 제네릭 라이프타임 259
__10.4.4 라이프타임 명시 문법 260
__10.4.5 함수 시그니처에서 라이프타임 명시하기 261
__10.4.6 라이프타임의 측면에서 생각하기 264
__10.4.7 구조체 정의에서 라이프타임 명시하기 265
__10.4.8 라이프타임 생략 266
__10.4.9 메서드 정의에서 라이프타임 명시하기 269
__10.4.10 정적 라이프타임 270
10.5 제네릭 타입 매개변수, 트레이트 바운드, 라이프타임을 한 곳에 사용해보기 271
정리 272

CHAPTER 11 자동화 테스트 작성하기 273
11.1 테스트 작성 방법 274
__11.1.1 테스트 함수 파헤치기 274
__11.1.2 assert! 매크로로 결과 검사하기 279
__11.1.3 assert_eq!, assert_ne!

출판사 서평

러스타시안 커뮤니티가 직접 만든 RUST 2021 공식 가이드북 ‘The Book’

러스트는 빠르고 안정적인 소프트웨어를 작성할 수 있는 오픈소스 시스템 프로그래밍 언어로서 개발자들의 뜨거운 사랑을 받고 있다. 그리고 러스트 입문에 필요한 단 한 권의 책으로 평가받는, 러스타시안 커뮤니티에서 소위 ‘The Book’으로 불리는 러스트 공식 가이드북의 러스트 2021 버전의 한국어판이 출간되었다.

러스트 코어 팀에 몸담으며 러스트를 누구보다 잘 이해했던 스티브 클라브닉과 캐럴 니컬스는 커뮤니티의 피드백과 함께 러스트를 최대한 활용하는 방법을 온라인 문서로 정리했고, 이를 바탕으로 종이책 《러스트 프로그래밍 공식 가이드》가 출간될 수 있었다. 초판(러스트 2018)에 비해 본 2판(러스트 2021)은 온라인 문서 한국어 번역을 주도한 권지용(rinthel)의 친절한 구어체 텍스트를 바탕으로 했고, 원서 종이책의 오류를 바로잡아 한층 개선된 모습을 보여준다.

책의 1~3장에서는 러스트 및 카고 설치, 기초 프로그래밍 개념을 다루고, 4~9장은 구조체, 열거형, 제어 흐름, 모듈 시스템, 다양한 데이터 구조, 에러 처리를 다룬다. 10~12장에서는 제네릭, 트레이트, 라이프타임, 테스트를 다루고, 커맨드 라인 도구도 하나 만들어본다. 13~15장은 클로저, 카고, 스마트 포인터, 16~19장은 동시성, 객체 지향, 패턴 매칭, ‘안전하지 않은’ 러스트 등 좀 더 심화된 주제를 다룬다. 20장에서는 마지막 프로젝트 예제로 멀티스레드 웹서버를 구현한다.

저수준의 디테일 제어가 가능하면서도 고수준의 인체공학적 설계를 갖춘 러스트를 이해하고 싶다면 이 공식 가이드가 최적의 선택이다. 기본 개념부터 심화 주제까지 모든 내용을, 컴파일러 주도 개발 스타일의 예제와 함께 러스타시안 친화적인 톤으로 일관되게 엮었다. 러스트를 배울 때 책을 딱 한 권만 꼽으라면 왜 이 책이 꼽히는지, 읽어보면 이유를 알 수 있다.

주요 내용
● 함수 생성, 데이터 구조 선택, 변수 바인딩 등 러스트 기본 개념
● 컴파일러와의 소통에 필요한 소유권과 대여, 라이프타임, 제네릭, 트레이트, 트레이트 객체
● 스마트 포인터, 멀티스레딩, 소유권을 결합해 동시성을 구현하는 법
● 내장 패키지 관리자 카고를 사용한 빌드, 문서화, 디펜던시 관리
● 테스트, 에러 처리, 리팩터링, 패턴 매칭을 활용하는 베스트 프랙티스