도서상세
장바구니에 상품을 담았습니다.
바로가기
  1. 도서정가제
  2. 소득공제
일시재고부족
30,000원
27,000원
10%
최대 적립 포인트
1,800 원
  • 구매 적립
    적립금 안내
    • 상품 적립금
    • 상품 적립금은 고객님이 웬디북에서 상품을 구매하실 경우 이에 대한 마일리지 개념으로 구매금액의 일부를 적립해 드리는 제도이며 사용은 예치금과 같이 현금처럼 사용가능하십니다.
    • 멤버십 적립금
    • 멤버십 적립금은 고객님의 멤버십(고객)등급에 따라 도서 구매액의 1 ~ 4%에 해당하는 적립금이 추가로 적립되며 적립금은 다음 주문시 현금처럼 사용이 가능합니다.
    • 다만 적립금은 예치금과는 달리, 현금으로 환불하실 수 없고 적립금의 적립일로 부터 12개월 이내에 사용하시지 않으면 자동으로 소멸됩니다.
  • 상품 적립금
    1,500원
  • 리뷰 적립
  • 최대 리뷰 적립금
    300원
27,000원
· 쿠폰 및 적립금은 결제 시 적용해 주세요
바로구매
장바구니 담기
일시재고부족
이 책을 구입하신 분들이 산 책
상세 이미지 더보기
상세 이미지
목차 더보기
목차
옮긴이 머리말 ix
베타리더 후기 xii
시작하며 xiv
감사의 글 xxii
표지에 대하여 xxiv

CHAPTER 1 위험한 진실: true와 false 1
1.1 시작하기: ‘Hello, world!’ 2
1.2 러스트 프로젝트 디렉터리 구성하기 3
1.3 카고로 프로젝트 만들고 실행하기 4
1.4 통합 테스트 작성하고 실행하기 8
__1.4.1 프로젝트 의존성 추가하기 12 / 1.4.2 프로그램 종룟값 이해하기 13
__1.4.3 프로그램 출력 테스트하기 17 / 1.4.4 프로그램을 이어주는 종룟값 18
요약 19

CHAPTER 2 메아리 테스트: echo 21
2.1 echo의 작동 방식 22
2.2 시작하기 25
__2.2.1 명령줄 인수에 접근하기 26 / 2.2.2 clap을 의존성으로 추가하기 29
__2.2.3 clap으로 명령줄 인수 파싱하기 31 / 2.2.4 프로그램 출력 생성하기 35
2.3 통합 테스트 작성하기 40
__2.3.1 테스트 출력 파일 생성하기 41 / 2.3.2 프로그램 출력 비교하기 43
__2.3.3 Result 타입 사용하기 44
2.4 clap 파생 사용하기 48
요약 51

CHAPTER 3 캣워크 위에서: cat 52
3.1 cat의 작동 방식 53
3.2 시작하기 58
__3.2.1 테스트로 시작하기 58 / 3.2.2 매개변수 정의하기 60
__3.2.3 파일 인수 반복 처리하기 65 / 3.2.4 파일 또는 STDIN 열기 67
__3.2.5 테스트 스위트 사용하기 71
3.3 설루션 75
__3.3.1 파일의 내용을 줄 단위로 읽기 75 / 3.3.2 줄 번호 인쇄하기 76
3.4 한 걸음 더 나아가기 79
요약 80

CHAPTER 4 두통: head 81
4.1 head의 작동 방식 82
4.2 시작하기 85
__4.2.1 인수 정의하기 90 / 4.2.2 입력 파일 처리하기 92
__4.2.3 바이트 읽기 vs. 문자 읽기 94
4.3 설루션 95
__4.3.1 파일의 내용을 한 줄씩 읽기 96 / 4.3.2 파일을 읽는 동안 줄 끝을 유지하기 96
__4.3.3 파일에서 바이트 읽기 98 / 4.3.4 파일 헤더 인쇄하기 101
4.4 한 걸음 더 나아가기 102
요약 103

CHAPTER 5 어머니께 전할 말: wc 104
5.1 wc의 작동 방식 105
5.2 시작하기 110
__5.2.1 파일 반복 처리하기 116
__5.2.2 파일 요소의 수를 세는 함수 작성하고 테스트하기 118
5.3 설루션 121
__5.3.1 파일이나 STDIN의 요소 수 세기 122 / 5.3.2 출력 형식화하기 124
5.4 한 걸음 더 나아가기 130
요약 131

CHAPTER 6 유일무이의 소굴: uniq 133
6.1 uniq의 작동 방식 134
6.2 시작하기 139
__6.2.1 인수 정의하기 140 / 6.2.2 프로그램 테스트하기 143
__6.2.3 입력 파일 처리하기 148
6.3 설루션 150
6.4 한 걸음 더 나아가기 155
요약 156

CHAPTER 7 주운 사람이 임자: find 157
7.1 find의 작동 방식 158
7.2 시작하기 164
__7.2.1 인수 정의하기 165 / 7.2.2 인수의 유효성 검사하기 171
__7.2.3 전부 찾아내기 173
7.3 설루션 175
7.4 조건부 테스트: 유닉스 vs. 윈도우 182
7.5 한 걸음 더 나아가기 184
요약 186

CHAPTER 8 면도와 이발: cut 188
8.1 cut의 작동 방식 189
8.2 시작하기 194
__8.2.1 인수 정의하기 195 / 8.2.2 구분 기호의 유효성 검사하기 201
__8.2.3 위치 목록 파싱하기 요구 사항 203 / 8.2.4 위치 목록 파싱하기 설루션 208
8.2.5 문자 또는 바이트 추출하기 212 / 8.2.6 구분 기호로 분리된 텍스트 파싱하기 214
8.3 설루션 217
__8.3.1 문자열에서 문자 선택하기 217 / 8.3.2 문자열에서 바이트 선택하기 219
__8.3.3 csv::StringRecord에서 필드 선택하기 221 / 8.3.4 끝판왕 223
8.4 한 걸음 더 나아가기 225
요약 226

CHAPTER 9 잭 더 그레퍼: grep 227
9.1 grep의 작동 방식 228
9.2 시작하기 232
__9.2.1 인수 정의하기 233 / 9.2.2 검색할 파일 찾기 240
__9.2.3 입력에서 매칭되는 줄 찾기 243
9.3 설루션 248
9.4 한 걸음 더 나아가기 252
요약 253

CHAPTER 10 보스턴 커먼: comm 254
10.1 comm의 작동 방식 254
10.2 시작하기 258
__10.2.1 인수 정의하기 259 / 10.2.2 입력 파일 검증하고 열기 264
__10.2.3 파일 처리하기 266
10.3 설루션 268
10.4 한 걸음 더 나아가기 276
요약 277

CHAPTER 11 테일러 스위프트: tail 278
11.1 tail의 작동 방식 279
11.2 시작하기 284
__11.2.1 인수 정의하기 284 / 11.2.2 명령줄 인수를 파싱하고 유효성 검사하기 287
__11.2.3 양수와 음수 수치 인수 파싱하기 290
__11.2.4 정규 표현식을 이용해서 정수와 옵션으로 붙는 기호 매칭하기 294
__11.2.5 파일 처리하기 298 / 11.2.6 파일의 전체 줄과 바이트 수 세기 298
__11.2.7 인쇄할 시작 줄 찾기 300 / 11.2.8 인쇄할 시작 바이트 찾기 302
__11.2.9 대용량 입력 파일을 가지고 프로그램 테스트하기 303
11.3 설루션 304
__11.3.1 파일의 전체 줄과 바이트 수 세기 304 / 11.3.2 시작 색인 찾기 305
__11.3.3 줄 인쇄하기 306 / 11.3.4 바이트 인쇄하기 308
__11.3.5 설루션 벤치마크하기 310
11.4 한 걸음 더 나아가기 313
요약 313

CHAPTER 12 행운아: fortune 314
12.1 fortune의 작동 방식 315
12.2 시작하기 319
__12.2.1 인수 정의하기 320 / 12.2.2 입력 소스 찾기 326 / 12.2.3 운세 파일 읽기 330
__12.2.4 무작위로 운세 고르기 332 / 12.2.5 패턴과 매칭되는 레코드 인쇄하기 334
12.3 설루션 335
12.4 한 걸음 더 나아가기 341
요약 341

CHAPTER 13 라스칼리: cal 343
13.1 cal의 작동 방식 344
13.2 시작하기 347
__13.2.1 인수 정의하고 검증하기 347 / 13.2.2 프로그램 작성하기 358
13.3 설루션 361
13.4 한 걸음 더 나아가기 366
요약 367

CHAPTER 14 엘에스 섬: ls 368
14.1 ls의 작동 방식 369
14.2 시작하기 372
__14.2.1 인수 정의하기 373 / 14.2.2 파일 찾기 377 / 14.2.3 긴 목록 형식화하기 382
__14.2.4 8진수로 된 권한 표시하기 384 / 14.2.5 긴 형식 테스트하기 388
14.3 설루션 390
14.4 테스트 작성 시 참고 사항 397
14.5 한 걸음 더 나아가기 400
요약 401

에필로그 402
찾아보기 404
저자 소개
저자 : 켄 유엔스-클라크
소프트웨어 개발자이자 교육자 및 작가. 노스 텍사스 대학교에서 학부에 들어가 재즈(드럼)를 연구하다 여러 번 전공을 바꿔 결국 영문학 학사를 땄다. 1990년대 중반부터 직장에서 코딩을 배워 산업계, 학계, 비영리단체에서 일했다. 2019년 애리조나 대학교에서 바이오시스템 공학 석사 학위를 받았다. 저서로 《21개의 작고 재미난 파이썬 프로젝트》(제이펍, 2021) 등이 있다.

역자 : 조성만
넓고 얕은 IT 잡지식을 추구하는 평범한 개발자다. 소프트웨어 스트리밍, 애플리케이션 가상화, 크로스플랫폼 툴킷, 웹브라우저 기술에 관심이 많다. 다음 마이피플, 네이버 웨일, 네이버랩스 어웨이, 클로바 페이스사인 개발에 참여했다. 지금은 엔씨소프트에서 소프트웨어 엔지니어로 일하고 있다. 《프로그래밍 러스트(개정판)》(제이펍, 2023), 《레일스와 함께하는 애자일 웹 개발(개정판)》(인사이트, 2012), 《프로페셔널 안드로이드 2 애플리케이션 개발》(제이펍, 2010) 등을 우리말로 옮겼다.
저자 소개 더보기
출판사 서평 더보기
출판사 서평
CLI 도구, 러스트로 다시 짭시다
ls나 cat 같은 CLI 도구는 유닉스 환경에서 수시로 쓰이는 명령이다. 이런 익숙한 도구는 핵심 기능을 직접 구현하는 것이 상대적으로 그리 어렵지는 않으므로, 새 언어를 익히기 위해 클론 코딩하기에 아주 좋은 소재다. 이 점에 착안해서 cat, grep, ls, echo, head, wc, uniq, find, cut, comm, tail, cal 등 우리에게 친숙한 14가지 CLI 도구를 러스트로 만들며 러스트를 진득하게 익히는 게 이 책의 주요 내용이다.
오리지널 도구들의 작동 방식과 요구 사항을 살펴본 다음, 독자는 저자의 코드를 참고해 자신만의 러스트 ‘도전 과제’ 프로그램을 만들어본다. 어떻게 프로그램을 시작하고, 메인 로직을 작성하며, 테스트를 거쳐 완성된 제품을 만드는지, 처음부터 끝까지 익힐 수 있다. 오류 처리, 파일 읽고 쓰기, 정규 표현식, 러스트의 타입과 구조체 등을 사용하는 데에도 익숙해질 것이다.
이 과정에서 저자는 테스트 주도 개발(TDD) 방식에 따라, 까다로우면서도 친절한 러스트 컴파일러를 십분 활용하는 좋은 러스트 개발 습관을 들이게 해준다. 빈말이 아니라, 14개 장에 걸쳐 프로그램을 총 14개 만들게 되어 있고 장마다 패턴이 비슷하므로 책을 정독한다면 반복 학습의 효과를 톡톡히 누릴 수 있을 것이다.
이 책의 원서는 2022년 최초 출간되었는데, 2024년 3월에 clap 크레이트 등의 최신 버전과 패턴을 도입하고 좀 더 ‘러스트다운’ 코드로 가다듬은 3쇄가 나왔다. 본 번역서는 원서 2쇄 기반으로 출간을 앞두고 있었으나, 3쇄 개정 소식을 듣고 눈물을 머금고 재작업해 3쇄 내용을 모두 반영했다.

주요 내용
● 러스트 표준 라이브러리 및 데이터 타입을 사용해 시스템 프로그램 만들기
● 러스트 프로그램 및 함수 작성과 테스트
● stdin, stdout, stderr을 포함한 파일 읽기 및 쓰기
● 명령줄 인수 문서화 및 유효성 검사
● 우아하게 실패하는 프로그램 작성하기
● 원시 텍스트 및 구분된 텍스트 구문 분석
● 무작위성의 활용 및 제어
리뷰(0)
0 / 5.0
리뷰 작성
•
리뷰를 작성하시면 소정의 적립금을 드립니다.
•
도서의 첫번째 리뷰부터 10번째 리뷰까지는 기본 적립금의 2배를 적립해 드리며, 이후 리뷰부터는 기본 적립금이 적립됩니다.
리뷰 혜택 및 유의사항
배송방법

배송은 CJ대한통운(전화 : 1588-1255)을 이용해서 보내드리고 있습니다.

3만원 이상 구매시 무료배송 가능하며, 3만원 미만의 경우 2500원의 배송비가 발생합니다.

배송기간

15시 이전에 입금확인된 주문까지는 당일날 발송하며, 일반적인 경우 다음날 책을 받아보실 수 있습니다.

주말 또는 공휴일이 있거나 시기적으로 배송이 많은 기간인 경우는 지역에 따라 1~2일이 더 소요될 수 있습니다.

주문 후, 5일이 경과해도 책이 도착하지 않는 경우에는 웬디북 고객센터(전화 : 1800-9785)로 전화를 주시거나 고객센터 > 1:1 문의를 통해 문의글을 남겨주시면 확인 후 신속히 조치하도록 하겠습니다.

묶음배송

묶음배송 원하시는 모든 주문서의 상태가 "입금대기" 또는 "결제완료" 상태일 경우에만 처리가 가능하며, 고객센터 > 1:1 문의에서 신청 할 수 있습니다.

반품안내

변심반품의 경우 도서주문일로부터 15일이내에 반품접수가 가능하며, 반품 배송비는 고객님 부담입니다.

부분 반품의 경우, 3만원 이상 주문으로 무료배송 받았으나 일부 상품 반품으로 주문금액이 3만원이 안될 경우, 이전 주문의 배송비를 포함한 왕복 배송비를 부담하셔야 합니다.

반품절차는 고객센터의 반품교환신청 페이지에서 신청을 해주시면 웬디북 고객센터에서 지정택배사에 회수요청을 하고, 방문한 택배기사님을 통해 반품도서를 보내주시면 됩니다.

운송 중 책이 손상되지 않도록 포장을 해주신 후, 포장 겉면에 “반품도서”라고 기재해주시기 바랍니다. 회수된 상품은 요청해주신 환불방법에 따라 적립 또는 환불 진행해드립니다.

(특히 팝업북 등은 조그만 충격에도 책이 손상될 수 있으므로 주의해 주시기 바랍니다.)

• 반품이 불가한 경우
  • 1. 고객에게 책임 있는 사유로 상품(띠지 또는 더스트커버 포함)이 멸실 또는 훼손된 경우
  • 2. CD 나 소프트웨어 포함, 포장이 되어 있는 모든 상품의 포장 개봉
  • 3. 만화책 및 단시간 내에 완독이 가능한 잡지
  • 4. 상품과 함께 발송된 추가사은품이 분실되거나 훼손된 경우
  • 5. 고객의 사용 또는 일부 소비에 의하여 상품의 가치가 현저히 감소한 경우
  • 6. 명시된 반품가능 기한이 지난 경우
  • 7. 세트상품중 일부 반품
교환안내

파본도서 혹은 오배송으로인한 교환은 도서주문일로부터 15일 이내에 신청하셔야 하며 이 경우 배송비는 웬디북에서 부담합니다.

(단, 팝업북과 CD가 세트인 책은 책의 특성상 7일 이내에 해주셔야 합니다.)

교환절차는 고객센터의 반품교환신청 페이지에서 신청을 해주시면 웬디북에서 새 책을 보내드리고 새 책을 받으실 때 교환도서와 맞교환 하시면 됩니다.

교환은 동일도서에 한하며, 다른 도서로 교환은 불가합니다.

운송도중 책이 손상되지 않도록 포장을 해주신 후, 포장 겉면에 “반품도서”라고 기재해주시기 바랍니다.

(특히 팝업북 등은 조그만 충격에도 책이 손상될 수 있으므로 주의해 주시기 바랍니다.)

• 교환이 불가한 경우
  • 1. 고객에게 책임 있는 사유로 상품이 멸실 또는 훼손된 경우
  • 2. 포장 상품의 포장을 해체한 경우
  • 3. 고객의 사용 또는 일부 소비에 의하여 상품의 가치가 현저히 감소한 경우
  • 4. 물품 수령 후, 15일이 경과한 경우
  • 5. 동일상품으로 교환하신 후, 다시 교환하시고자 할 경우 (이 경우에는 환불처리 해드립니다.)
신고하기
신고사유 선택
도서 입고 알림 신청
입고알림 신청하셨습니다.
입고시 {{tel}}로 문자 발송됩니다

바로 확인 하시겠습니까?
예

휴대폰 번호, 이메일 주소는

마이 페이지 > 회원정보수정에서 확인해 주세요.

관심 시리즈 신간 알림 신청
시리즈명:{{ series_name }}
관심 시리즈 신간 입고 알림 신청하셨습니다.
입고시 {{ tel }}로 문자 발송 또는
앱푸시, 이메일 등으로 알려드리겠습니다.

바로 확인 하시겠습니까?
예

휴대폰 번호, 이메일 주소는

마이 페이지 > 회원정보수정에서 확인해 주세요.

입고 알림 수신 방법 변경은

마이 페이지 > 알림 > 알림 설정에서 확인해 주세요.

푸시 알림이 오지 않을 시,

스마트폰 설정 > 알림 > 웬디북 앱 설정을 확인해 주세요

관심 작가 신간 알림 신청
작가명:{{ series_name }}
관심 작가 신간 입고 알림 신청하셨습니다.
입고시 {{ tel }}로 문자 발송 또는
앱푸시, 이메일 등으로 알려드리겠습니다.

바로 확인 하시겠습니까?
예

휴대폰 번호, 이메일 주소는

마이 페이지 > 회원정보수정에서 확인해 주세요.

입고 알림 수신 방법 변경은

마이 페이지 > 알림 > 알림 설정에서 확인해 주세요.

푸시 알림이 오지 않을 시,

스마트폰 설정 > 알림 > 웬디북 앱 설정을 확인해 주세요

{{title}}
{{content}}
{{title}}
{{content}}