Rust 치트시트 — 간편 참조
Rust 2021 문법, 소유권, 에러 처리와 가장 자주 쓰는 std API를 모은 치트시트. 일상의 약 80%를 커버.
Rust Rust 2021 edition
rustc / cargo · 컴파일형 · 시스템 · 함수형 · 동시성 · 정적 · 강한 타입 · 아핀(이동 의미론)
추천 학습 경로
먼저 cargo new/run와 println! 습득 → 변수 바인딩, 소유권, 빌림(Rust 핵심) 마스터 → match, 함수, 클로저로 깊이 들어가기 → Vec/HashMap/반복자로 데이터 정리 → 트레이트와 제네릭 이해 → Result와 ?로 에러 처리 → 스레드와 channel로 동시성 작성 → 그 다음 필요에 따라 네트워크, 시간, 빌드/테스트 학습. FAQ 섹션은 함정 회피를 위한 복습용으로 좋습니다.
1.Hello World 와 빌드 환경
Rust 프로그램 실행, cargo 프로젝트, 툴체인.
최소 프로그램
fn main이 진입점입니다. println! 매크로가 출력합니다. 문장은 세미콜론으로 끝납니다.
실행과 빌드
cargo run 컴파일 후 실행, cargo build 바이너리 생성, cargo check 빠른 타입 검사.
cargo 프로젝트
cargo new로 프로젝트 초기화. Cargo.toml에 패키지와 의존성 선언. src/에 소스.
edition
edition이 언어 에디션을 선언. 2021이 현재. rust-version이 최소 툴체인을 선언.
출력 매크로
println! / print!는 표준 출력, eprintln!은 에러 스트림, format!은 문자열 생성.
커맨드라인 인자
std::env::args로 커맨드라인 인자를 가져옵니다. 첫 번째는 프로그램 경로.
여러 파일
mod로 모듈 선언. 서브모듈은 파일 또는 디렉터리. use로 가져오기.
직접 컴파일
rustc는 단일 파일 컴파일. cargo 의존성 없음. 연습과 작은 스크립트에 적합.
2.변수와 바인딩
let 바인딩, 가변성, 섀도잉, 스코프, 타입.
let 과 mut
let 바인딩은 기본 불변. mut로 가변 선언. Rust 변수는 기본 불변입니다.
섀도잉
같은 이름의 let이 이전 바인딩을 가립니다(섀도잉). 타입 변경 가능. mut와는 다릅니다.
const 과 static
const는 컴파일 타임 상수. static은 정적 변수. 명명은 SCREAMING_SNAKE_CASE.
타입 추론
컴파일러가 컨텍스트에서 타입을 추론. 필요하면 명시. 정수 기본 i32.
구조분해 바인딩
let은 패턴 구조분해 지원. 튜플, 구조체, 배열을 한 번에 꺼낼 수 있습니다.
스코프
블록 스코프 {}. 변수 수명. 안쪽에서 바깥쪽에 접근 가능.
네이밍 규칙
Rust 네이밍 규칙. 변수/함수는 snake_case, 타입은 CamelCase.
타입 변환
as는 명시적 숫자 변환을 수행합니다. From/Into trait은 안전한 변환을 제공합니다.
3.타입 시스템
기본 타입, 튜플, 구조체, 열거형.
기본 타입
정수, 부동소수점, 불리언, 문자. 스칼라 타입과 그 폭.
정수 타입
i8~u128, usize / isize. 부호 있음/없음. 플랫폼 의존 크기.
부동소수점
f32 / f64는 IEEE 754를 따릅니다. NaN, 무한, 연산.
char 타입
char는 유니코드 스칼라 값이며, 4바이트를 차지합니다. 작은따옴표 리터럴입니다.
튜플
고정 길이 이종 컬렉션. 인덱스 접근. 구조분해. 빈 튜플은 ().
구조체
struct는 명명된 필드를 정의. 생성, 필드 접근, 업데이트 구문.
열거형
enum은 여러 배리언트를 정의. 데이터를 담을 수 있음. match로 완전 분기.
유닛 타입
()는 값 없음. 함수의 기본 반환 타입. 인자/반환 없는 관례.
4.소유권과 참조
소유권, 빌림, 참조, 슬라이스 — Rust 메모리 안전의 핵심.
소유권
값은 유일한 소유자를 가집니다. 스코프 종료 시 자동 해제. 복사가 아니라 이동.
참조
&T는 불변 참조이며, 소유권을 옮기지 않습니다. 빌린 뒤에도 원래 값을 계속 사용할 수 있습니다.
가변 참조
&mut T는 가변 참조. 같은 스코프에서 한 변수에 가변 참조는 하나만 가능.
역참조
* 연산자는 참조가 가리키는 값에 접근. 역참조는 참조와 짝을 이룹니다.
수명
'a로 참조의 유효 범위를 표기. 빌림 검사기가 유효성을 보장. 생략 규칙.
슬라이스
&[T]는 연속 요소의 참조. 문자열 슬라이스는 &str. 소유권 없음.
Deref 자동 역참조
Deref 트레이트로 &String을 &str 등으로 자동 변환. 매개변수 다형이 편리.
Copy 타입
Copy 트레이트 타입은 대입 시 복사. 정수, 부동소수점, bool, char 등.
5.제어 흐름
if, match, 루프. Rust의 제어 흐름은 표현식 기반입니다.
if 표현식
if / else는 표현식이며 값을 반환할 수 있음. 조건에 괄호 불필요.
match
match는 패턴을 완전 매칭. 각 가지는 표현식. 패턴, 범위, 가드 사용.
while 루프
while은 조건 루프. 조건이 참인 동안 반복.
for 루프
for는 범위와 반복자를 순회. Rust에서 우선되는 루프 형태.
무한 루프
loop는 break까지 무한 반복. 값을 반환할 수 있음. 레이블도 지원.
break 와 continue
break는 루프 종료. continue는 현재 반복 건너뜀. 레이블과 함께 사용 가능.
if let
if let은 단일 패턴 매칭을 간결하게. 한 배리언트만 볼 때 사용.
while let
while let은 패턴이 더는 매칭되지 않을 때까지 루프. 컬렉션 소진에 적합.
6.함수
함수 정의, 반환값, 소유권 이동, 클로저, 제네릭.
함수 정의
fn은 함수를 정의합니다. 매개변수에는 타입 표기가 필요합니다. 함수 본문은 표현식입니다.
반환값
마지막 표현식이 반환값. 세미콜론으로 문장과 표현식을 구분.
매개변수
매개변수는 기본 불변. 매개변수에서의 패턴 구조분해. 참조로 복사 회피.
소유권 매개변수
값으로 전달하면 소유권이 이동. 빌리면 재사용 가능. 필요시 소유권을 반환.
빌림 매개변수
&T는 읽기 전용 빌림, &mut T는 가변 빌림. 소유권 이동 회피.
클로저
클로저는 환경 변수를 캡처합니다. |매개변수| 구문. 변수에 저장하거나 함수에 전달 가능.
함수 포인터
fn 타입은 일반 함수를 참조합니다. fn(T) -> U 구문을 사용합니다. 클로저를 fn으로 변환할 수 있습니다.
제네릭 함수
<T> 제네릭 매개변수로 타입 추상화. 경계 추가 가능. 타입 추론.
7.문자열
&str 과 String, 연산, 서식, 파싱, 순회.
&str 과 String
&str은 빌린 문자열 슬라이스, String은 소유권을 가진 가변 길이 문자열.
String 연산
추가, 삽입, 치환, 제거 등 String을 수정하는 메서드.
서식
format!으로 문자열을 조립. 자리표시자와 서식 제어. 안전하고 효율적.
문자열 슬라이스
&s[a..b]는 바이트 단위 슬라이스. 문자 경계에서만 가능, 아니면 panic.
문자열 순회
chars()는 문자 단위, bytes()는 바이트 단위, char_indices는 위치를 함께.
문자열 파싱
str::parse는 값을 숫자로 파싱합니다. parse::<T>()는 대상 타입을 표기해야 합니다.
문자 연산
char 메서드: 대소문자, 숫자 판정, 공백. 문자열 메서드와 조합.
문자열 메서드
검색, 트림, 분할, 판정. 자주 쓰는 str 메서드를 체이닝.
8.컬렉션
Vec, HashMap, 집합 타입, 반복자.
Vec
Vec<T>는 동적 배열. 길이 가변, 추가와 제거 가능. 스택에 참조, 힙에 데이터.
Vec 연산
순회, 필터, 매핑, 수집. 슬라이스 뷰와 소유권.
HashMap
HashMap<K, V>는 키/값 쌍. 해시 구현, 순서 없음. 조회 O(1).
HashSet
HashSet<T>는 유일한 원소의 집합. 중복 제거, 교집합, 합집합, 차집합.
BTree
BTreeMap / BTreeSet는 키가 정렬됨. 순서대로 순회. 성능은 해시보다 약간 느림.
반복자
Iterator trait은 체이닝 연산을 구동합니다. 지연 평가이며, 소비할 때만 실행됩니다.
VecDeque
VecDeque는 양쪽 끝 큐. 양쪽에서 효율적 추가/제거. 링 버퍼.
중첩 컬렉션
컬렉션의 조합. Vec<HashMap>, 중첩 HashMap, 다차원 Vec.
9.메모리와 소유권 확장
힙 할당, 스마트 포인터, 공유 소유권.
스택과 힙
스택은 고정 크기로 빠름. 힙은 가변 크기로 할당 필요. 소유권이 수명을 관리.
Box
Box<T>는 값을 힙에 보관. 크기 확정, 소유권을 이동. 재귀 타입에 필수.
Rc
Rc<T>는 참조 카운트 기반 공유 소유권. 단일 스레드. 읽기 전용 다중 소유.
RefCell
RefCell<T>는 런타임 빌림 검사. 내부 가변성. 빌림 충돌 시 panic.
Arc
Arc<T>는 스레드 안전한 참조 카운트. 다중 스레드 간 공유 소유권. 원자 카운터.
Mutex
Mutex<T>는 내부 값을 상호 배타적으로 접근하게 합니다. 잠금으로 보호됩니다. Arc와 함께 쓰면 가변 상태를 공유할 수 있습니다.
원자 타입
AtomicU32 등 원자 연산. 락 프리 동시 카운터. Ordering 메모리 순서.
스마트 포인터
Deref / Drop 트레이트. Box / Rc / Arc가 구현. 포인터 추상과 자동 정리.
10.트레이트와 제네릭
트레이트 추상화, 구현, 제네릭 경계, 다형성.
trait 정의
트레이트는 공유 동작을 정의. 메서드 시그니처. 인터페이스와 유사.
trait 구현
impl Trait for Type로 동작 구현. 고아 규칙: 트레이트나 타입 중 하나는 로컬.
기본 메서드
trait 메서드는 기본 구현을 제공할 수 있습니다. 오버라이드는 선택 사항이며, 호출 순서는 자동으로 결정됩니다.
트레이트 객체
dyn Trait은 동적 디스패치입니다. 이종 컬렉션을 허용합니다. 런타임 다형성.
제네릭
제네릭 타입과 함수. T로 추상화. 코드 재사용. 단형화로 무비용.
제네릭 경계
T: Trait 경계. where 절, + 로 경계 결합.
impl 블록
impl 블록에 연관 함수와 연관 메서드. self / Self. 생성자 관례.
조합과 다형성
Rust에는 상속이 없습니다. trait + 구성으로 재사용. 기본 구현이 베이스 클래스 역할.
11.에러 처리
Result, Option, ? 연산자, panic, 사용자 정의 에러.
Result
Result<T, E>는 성공 값 또는 에러를 반환합니다. Ok/Err 변형으로 구성됩니다.
unwrap 과 expect
unwrap은 성공 시 값, 실패 시 panic. expect는 panic 메시지를 함께. 디버그용.
? 연산자
?로 에러 전파를 간소화. Err는 자동 반환, Ok는 풀고 계속.
Error 구현
표준 Error 트레이트. Display + Debug 출력. 에러 체인.
사용자 정의 에러
자체 에러 타입 설계. 열거 배리언트가 컨텍스트 보유. 에러 분류.
thiserror
thiserror derive 매크로로 Display / Error를 자동 구현. 보일러플레이트 대폭 감소.
Option
Option<T>는 값이 없을 수 있음을 표현. Some / None. 안전한 접근.
panic
panic!는 복구 불가능 에러. 스택을 풀며 종료. 버그 상황에서만.
12.입출력
표준 입출력, 파일 읽기/쓰기, 파일 시스템.
입력 읽기
stdin에서 read_line으로 한 줄을 String에. trim으로 개행 제거.
파일 읽기
read_to_string으로 한 번에 읽기. Read 트레이트로 스트림 읽기.
파일 쓰기
write / append로 쓰기. OpenOptions로 모드 제어. 버퍼 쓰기.
파일 시스템
디렉터리 생성, 삭제, 이름 변경, 존재 판정. 경로 조작.
BufRead 한 줄씩
BufRead 트레이트로 한 줄씩. lines(), read_line, split.
출력과 쓰기
print! / println! / eprintln!. write! / writeln!은 임의의 writer 대상.
표준 스트림
stdin / stdout / stderr. 대화형과 파이프 데이터 모두 지원.
바이트 I/O
read로 바이트를 버퍼에. 바이너리 스트림 처리. write_all로 전부 쓰기.
13.자주 하는 실수
Rust 초보자가 가장 자주 빠지는 함정과 올바른 작성법.
이동 후 사용
이동된 값은 더는 사용 불가. 빌리거나 clone으로 소유권 보존.
빌림 충돌
불변 빌림과 가변 빌림은 공존 불가. 스코프로 빌림 범위를 좁힘.
댕글링 참조
지역 변수의 참조를 반환하면 댕글링이 발생합니다. 소유권을 가진 값이나 수명을 명시해야 합니다.
String 연결
+는 왼쪽을 이동. 반복 +는 비효율. format! 또는 push_str 사용.
인덱스 타입
인덱스와 길이는 usize입니다. 컬렉션 인덱스 타입이 맞지 않을 수 있음.
match 가지 타입
match의 모든 가지는 같은 반환 타입이어야 함. 누락된 가지는 _ 로 완전 매칭.
클로저 캡처
클로저는 필요에 따라 자동으로 빌림 또는 이동. 동시 빌림은 충돌. move로 명시적 이동.
정수 오버플로
디버그 빌드는 오버플로에 panic. 릴리스 빌드는 wrap. 명시 처리 또는 더 큰 타입.
14.동시성
스레드, channel, 공유 상태, Send / Sync.
스레드
thread::spawn으로 새 스레드 시작. join으로 완료 대기. 반환값도 전달 가능.
move 클로저
move 클로저는 캡처한 값을 스레드로 옮깁니다. 빌림의 댕글링을 피할 수 있습니다.
channel
mpsc는 다중 생산자 단일 소비자. send / recv로 데이터 전달. 타입 안전.
다중 생산자
Sender를 복제해 다중 생산자. 수신 측은 공유.
공유 가변
Arc<Mutex<T>>로 스레드 간 가변 데이터 공유. 잠금이 읽기/쓰기를 보호.
scoped 스레드
thread::scope로 'static이 아닌 데이터를 빌림. 소유권 이동 불필요.
rayon 병렬
rayon 병렬 반복자. par_iter로 iter 대체. 데이터 병렬이 쉬워짐.
Send 와 Sync
Send는 스레드 간 이동 가능. Sync는 참조 공유 가능. 안전한 동시성 보장.
15.네트워크
TCP, UDP, HTTP, 서드파티 네트워크 crate.
TCP 연결
TcpStream으로 연결. read / write로 바이트 송수신. 스트림 프로토콜.
TCP 리슨
TcpListener로 바인딩/리스닝. accept로 연결 수락. 다중 연결은 스레드로 처리.
HTTP 요청
reqwest로 HTTP 요청. JSON 요청/응답 지원.
HTTP 서버
axum으로 HTTP 서비스 구축. 라우팅과 핸들러. 비동기.
URL 처리
url crate로 URL 파싱 및 구성. 쿼리 파라미터.
IP 파싱
std::net::IpAddr로 IP 파싱. IPv4 / IPv6 판별.
UDP
UdpSocket은 비연결 데이터그램. send_to / recv_from. 핸드셰이크 불필요.
DNS 해석
ToSocketAddrs로 호스트명 해석. 주소 반복자 반환.
16.시간과 날짜
SystemTime, Instant, Duration, chrono.
SystemTime
SystemTime은 시스템 시계. 현재 시각을 UNIX_EPOCH와 비교.
Instant 측정
Instant는 단조 시계로 경과 시간 측정. 시스템 시각 변경 영향 없음.
Duration
Duration은 시간 길이. 초/나노초 정밀도. 산술과 단위 변환.
chrono 현재 시각
chrono crate로 일시 처리. Utc / Local 시간대. 사람이 읽기 쉬움.
서식 출력
format으로 일시 서식. strftime 스타일 자리표시자.
문자열 파싱
DateTime::parse_from_str로 문자열 파싱. ISO 8601 지원.
시각 연산
시각의 가감, 간격 계산, 범위 판정.
시간대 처리
FixedOffset로 고정 시간대 표현. 시간대 간 변환 가능.
17.프로세스와 환경
커맨드라인 인자, 환경 변수, 자식 프로세스, 경로.
인자와 환경
std::env로 인자와 환경 변수를 읽음. args, var.
clap 인자 파싱
clap로 커맨드라인 인자 파싱. 서브커맨드, 옵션, 자동 도움말.
std::process
종료 코드, Command로 자식 프로세스 실행, 현재 프로세스 정보.
Command 자식 프로세스
Command로 자식 프로세스 제어. 인자, 환경, 파이프, 출력 캡처.
PathBuf
Path / PathBuf로 경로 조작. 결합, 컴포넌트, 정규화. 크로스플랫폼.
작업 디렉터리
현재 디렉터리, 디렉터리 변경, 홈 디렉터리. 경로 관련 헬퍼.
디렉터리 순회
read_dir로 디렉터리 열거. 재귀는 직접 구현. 항목 타입으로 필터 가능.
시그널 처리
ctrlc crate로 Ctrl-C 포착. 우아한 종료와 자원 정리.
18.정규 표현식
regex crate로 매칭, 캡처, 치환, 분할.
정규식 컴파일
Regex::new로 컴파일. 원시 문자열 r#... 사용. 컴파일 비용이 큼, 재사용.
매칭 판정
is_match로 매칭 여부 판정. 부분 매칭이 기본. 전체 매칭은 앵커 필요.
캡처 그룹
캡처 그룹으로 부분 문자열을 추출합니다. captures는 그룹을 반환합니다. 명명된 그룹도 지원됩니다.
전체 매칭
find_iter로 모든 매칭 순회. captures_iter는 그룹 포함.
치환
replace로 매칭 치환. $1로 그룹 참조. replace_all로 모두 치환.
분할
정규식으로 문자열 split. splitn으로 분할 수 제한.
자주 쓰는 패턴
자주 쓰는 정규식: 이메일, URL, 전화번호, IP. 문자 클래스.
플래그와 대소문자
(?i) 등 인라인 플래그. RegexBuilder로 더 세밀히 설정.
19.빌드와 테스트
cargo 빌드, 단위 테스트, lint, 릴리스 설정.
cargo build
프로젝트 빌드. 디버그/릴리스 프로파일. 산출물 경로. 증분 컴파일.
단위 테스트
#[test] 속성. cargo test가 실행. 단언 매크로.
문서 테스트
/// 문서 주석의 코드는 테스트로 실행. cargo test가 검증. 통합 테스트.
의존성 관리
Cargo.toml로 의존성 선언. SemVer. cargo update.
clippy 검사
cargo clippy가 코드 검사. 잠재적 버그와 스타일 이슈 발견.
코드 서식
cargo fmt가 rustfmt로 일관된 서식 적용. 팀 스타일 통일.
릴리스 설정
[profile.release]에서 최적화 설정. 바이너리 스트립과 LTO 등.
문서 생성
cargo doc이 API 문서 생성. rustdoc 마크업. 릴리스 전 문서 테스트 실행.
이 치트시트에 대해
이 페이지는 Rust 2021 에디션의 자기완결형 치트시트로, 언어 핵심과 실제 프로젝트에서 일상의 약 80%를 다루는 가장 자주 쓰이는 std API를 다룹니다. 현대적 관용구를 우선합니다: ?로 에러 전파, match의 완전 매칭, 수기로 작성한 루프 대신 반복자, String과 &str의 엄격한 구분. 권위 있는 참조는 Rust 공식 Book과 표준 라이브러리 문서를 보세요. 19개 섹션이 각 주제에 집중합니다 — 첫 프로그램부터 소유권, 트레이트, 동시성, 흔한 함정까지. 각 섹션은 예제 8개(5~20줄씩)로 나뉘어 총 약 150개 토픽. 코드 스니펫은 일부러 짧고 자기 설명적입니다. 모든 처리는 브라우저 내에서 이루어집니다 — 업로드도 추적도 없습니다. GuruToolkit 무료 개발자 도구 모음의 일부이며, 여기 스니펫은 무보증으로 자유롭게 사용할 수 있습니다.
버전 2.1.0