구매문의 및 도서상담은 031-944-3966(매장)으로 문의해주세요.
매장전집은 전화 혹은 매장방문만 구입 가능합니다.
지은이 : 브렌든 매슈스
아파치 소프트웨어 재단의 멤버이자 소프트웨어 엔지니어 겸 기업가이며, 초창기부터 러스트를 사용해온 오픈소스 참여자로서 《러스트 프로페셔널 코드》(제이펍, 2024)의 저자다. 14년 이상 깃허브 기여자로 활동하며, 여러 러스트 크레이트 및 오픈소스 러스트 프로젝트에 참여했고, 제품 수준의 러스트 애플리케이션을 전문적으로 구축했다.
옮긴이 머리말 x
베타리더 후기 xi
시작하며 xiii
감사의 글 xiv
이 책에 대하여 xv
표지에 대하여 xix
PART I 구성 요소
CHAPTER 1 러스트다운 패턴 3
1.1 이 책에서 다루는 내용 5
1.2 디자인 패턴이란? 6
1.3 이 책이 다른 이유 9
1.4 필요한 도구 10
1.5 정리하며 11
CHAPTER 2 러스트의 기본 구성 요소 13
2.1 제네릭 14
2.1.1 튜링 완전성 타입 시스템 14
2.1.2 왜 제네릭인가? 15
2.1.3 제네릭의 기초 15
2.1.4 러스트의 Option 살펴보기 19
2.1.5 마커 구조체와 팬텀 타입 19
2.1.6 제네릭 매개변수 트레이트 바운드 23
2.2 트레이트 23
2.2.1 트레이트가 객체 지향 프로그래밍이 아닌 이유 24
2.2.2 트레이트에 들어 있는 것들 25
2.2.3 객체 지향 코드를 살펴보며 트레이트 이해하기 26
2.2.4 제네릭과 트레이트 결합하기 30
2.2.5 자동으로 트레이트 도출하기 35
2.2.6 트레이트 객체 37
2.3 정리하며 40
CHAPTER 3 코드 흐름 43
3.1 패턴 매칭 둘러보기 44
3.1.1 패턴 매칭의 기초 44
3.1.2 ? 연산자로 간결하게 처리하기 50
3.2 함수적 러스트 53
3.2.1 러스트 함수형 프로그래밍의 기초 54
3.2.2 클로저 변수 캡처 56
3.2.3 반복자 살펴보기 57
3.2.4 iter(), into_iter(), iter_mut()로 반복자 얻기 62
3.2.5 반복자의 기능 71
3.3 정리하며 76
PART II 핵심 패턴
CHAPTER 4 기본 패턴 79
4.1 리소스의 획득은 초기화 80
4.1.1 C와 C++의 RAII 81
4.1.2 러스트의 RAII 둘러보기 85
4.1.3 러스트의 RAII 요약 87
4.2 인자를 값으로 전달하기와 레퍼런스로 전달하기 89
4.2.1 값으로 전달하기 89
4.2.2 레퍼런스로 전달하기 91
4.2.3 언제 무엇을 할 것인가?: 값으로 전달하기와 레퍼런스로 전달하기 93
4.3 생성자 94
4.4 객체 멤버 가시성과 접근성 97
4.5 오류 처리 99
4.6 전역 상태 102
4.6.1 lazy-static.rs 105 / 4.6.2 once_cell 106
4.6.3 static_init 107 / 4.6.4 std::cell::OnceCell 108
4.7 정리하며 109
CHAPTER 5 디자인 패턴: 기본을 넘어서 111
5.1 매크로를 사용한 메타프로그래밍 112
5.1.1 기본적인 선언적 매크로 113
5.1.2 언제 매크로를 사용해야 할까요? 115
5.1.3 매크로를 사용해 미니 DSL 작성하기 121
5.1.4 DRY에 매크로 사용하기 122
5.2 선택적 함수 인자 126
5.2.1 파이썬에서 선택적 인자 살펴보기 126
5.2.2 C++에서 선택적 인자 살펴보기 127
5.2.3 러스트에는 선택적 인자가 없다 127
5.2.4 트레이트로 선택적 인자 모방하기 128
5.3 빌더 패턴 131
5.3.1 빌더 패턴 구현하기 132
5.3.2 트레이트로 빌더 강화하기 134
5.3.3 매크로로 빌더 발전시키기 135
5.4 플루언트 인터페이스 패턴 139
5.4.1 플루언트 빌더 139
5.4.2 플루언트 빌더 테스트 142
5.5 관찰자 패턴 143
5.5.1 콜백을 쓰지 않는 이유 143
5.5.2 관찰자 구현하기 144
5.6 명령 패턴 147
5.6.1 명령 패턴 정의하기 148
5.6.2 명령 패턴 구현하기 149
5.7 뉴타입 패턴 152
5.8 정리하며 155
CHAPTER 6 라이브러리 디자인하기 157
6.1 좋은 라이브러리 디자인 158
6.2 한 가지만, 올바르게, 잘하기 159
6.3 과도한 추상화 피하기 160
6.4 기본 타입에 충실하기 160
6.5 도구 사용 161
6.6 좋은 예술가는 베끼고, 위대한 예술가는 훔친다(표준 라이브러리에서) 162
6.7 모든 것을 문서화하고 예제를 제공하세요 162
6.8 사용자의 코드를 망치지 마세요 163
6.9 상태를 생각하세요 163
6.10 미학 고려하기 164
6.11 러스트 라이브러리의 편리한 사용성 165
6.11.1 연결 리스트 다시 살펴보기 165
6.11.2 rustdoc을 사용해 API 디자인 개선하기 167
6.11.3 더 많은 테스트를 통해 연결 리스트 개선하기 174
6.11.4 다른 사람이 디버깅하기 쉬운 라이브러리 만들기 176
6.12 정리하며 179
PART III 고급 패턴
CHAPTER 7 특수한 작업에 트레이트, 제네릭, 구조체 사용하기 183
7.1 상수 제네릭 184
7.2 외부 크레이트 타입에 대한 트레이트 구현하기 186
7.2.1 래퍼 구조체 187 / 7.2.2 Deref를 사용하여 래핑된 구조체 언래핑하기 187
7.3 확장 트레이트 189
7.4 블랭킷 트레이트 191
7.5 마커 트레이트 194
7.6 구조체 태깅 196
7.7 레퍼런스 객체 199
7.8 정리하며 205
CHAPTER 8 상태 기계, 코루틴, 매크로, 프렐류드 207
8.1 트레이트 상태 기계 208
8.2 코루틴 212
8.3 절차적 매크로 218
8.4 프렐류드 222
8.5 정리하며 226
PART IV 문제 피하기
CHAPTER 9 불변성 229
9.1 불변성의 장점 230
9.2 불변성이 만능이 아닌 이유 232
9.3 불변 데이터에 대해 생각하는 방법 233
9.4 러스트의 불변성 이해하기 234
9.5 불변성의 기본 개념 살펴보기 236
9.6 트레이트를 사용해 (거의) 모든 것을 불변으로 만들기 239
9.7 불변성을 위해 Cow 사용하기 240
9.8 불변 데이터 구조를 위한 크레이트 244
9.8.1 im 사용하기 244 / 9.8.2 rpds 사용하기 245
9.9 정리하며 247
CHAPTER 10 안티패턴 249
10.1 안티패턴이란? 250
10.2 unsafe 사용하기 251
10.2.1 unsafe는 어떤 기능을 하나요? 253
10.2.2 unsafe는 어디에 사용할 수 있나요? 254
10.2.3 언제 unsafe를 사용해야 하나요? 256
10.2.4 unsafe는 위험한가요? 257
10.3 unwrap() 사용하기 257
10.4 Vec을 사용하지 않는 것 258
10.5 너무 많은 복제 262
10.6 다형성 모방을 위한 Deref 사용 263
10.7 전역 데이터와 싱글톤 268
10.8 너무 많은 스마트 포인터 269
10.9 앞으로 나아갈 방향 270
10.10 정리하며 271
APPENDIX A 러스트 설치하기 273
A.1 이 책에 필요한 도구 설치하기 273
A.1.1 Homebrew를 사용하여 맥OS용 도구 설치하기 273
A.1.2 리눅스 시스템용 도구 설치하기 274
A.1.3 윈도우용 도구 설치하기 274
A.2 rustc와 다른 러스트 구성 요소를 rustup 관리하기 275
A.2.1 rustc 및 기타 구성 요소 설치하기 275
A.2.2 rustup으로 기본 툴체인 전환하기 275
A.2.3 러스트 구성 요소 업데이트하기 275
찾아보기 277
도서 DB 제공 - 알라딘 인터넷서점 (www.aladin.co.kr)