기초
5단원 · 설치·변수·타입·제어흐름·함수
01. Rust 시작하기 (rustup·cargo·hello world)
기초 · 선수: 없음
Rust 는 메모리 안전성을 컴파일 타임에 보장하는 시스템 프로그래밍 언어입니다. GC 없이 C/C++ 급 성능을 내면서도 데이터 경합·널 포인터·use-after-free 같은 메모리 버그를 컴파일러가 막아주는 것이 핵심 매력입니다. 이 강의에서는 rustup 으로 툴체인을 설치하고 cargo 로 첫 프로젝트를 만들어 실행해 봅니다.
02. 변수·상수·섀도잉·타입 추론
기초 · 선수: 01강
Rust 의 변수는 기본적으로 불변(immutable) 입니다. mut 키워드로 명시해야 가변. 이런 디자인이 어떻게 멀티스레드 안정성과 코드 가독성을 동시에 끌어올리는지, 그리고 shadowing 이 어떻게 mut 없이도 값을 재사용하게 해 주는지 살펴봅니다. const 와 let 의 차이, 타입 어노테이션과 타입 추론도 함께 정리합니다.
03. 기본 타입 (정수·실수·bool·char·tuple·array)
기초 · 선수: 02강
Rust 의 스칼라 타입(i8/u8/i32/i64/f32/f64/bool/char) 과 복합 타입(tuple/array) 을 한 번에 정리합니다. 다른 언어와 다른 점은 정수 오버플로우 처리, char 가 4바이트 유니코드 스칼라 값이라는 점, 그리고 배열이 컴파일 타임 고정 크기라는 점입니다. Vec(가변 크기 배열) 은 다음 강의에서 다룹니다.
04. 제어 흐름 (if·loop·while·for·break value)
기초 · 선수: 03강
Rust 의 if 는 표현식입니다. let x = if cond { 1 } else { 2 } 처럼 값을 만들 수 있습니다. loop / while / for 의 차이, 그리고 Rust 특유의 break 에 값 붙이기, 라벨 붙은 break/continue, 그리고 range 와 iterator 의 for 루프 동작까지 한 번에 다룹니다.
05. 함수·표현식·반환값·문서화 주석
기초 · 선수: 04강
함수 정의 fn name(arg: T) -> R { ... }, 표현식과 문장(statement vs expression) 의 구분, 명시적 return 과 마지막 표현식의 암묵적 반환, 그리고 `///` 문서화 주석으로 cargo doc 이 생성되는 흐름까지 다룹니다. Rust 의 함수형 스타일 작성을 시작하는 강의입니다.
소유권
5단원 · 소유권·빌림·슬라이스·라이프타임·String
06. 소유권의 세 규칙 + move/copy
소유권 · 선수: 기초 1~5강
소유권(ownership) 은 Rust 가 GC 없이 메모리 안전을 보장하는 핵심 메커니즘입니다. 세 가지 규칙만 익히면 됩니다 — 각 값은 정확히 한 소유자, 소유자가 스코프를 벗어나면 값은 drop, 대입·인자 전달 시 소유권이 이동(move). 이 강의에서 move 와 copy 의 차이, Drop trait 의 의미를 짚고 다음 강의의 borrow 로 자연스럽게 이어집니다.
07. 참조와 빌림 (&T, &mut T, 빌림 규칙)
소유권 · 선수: 06강
빌림(borrowing) 은 소유권을 옮기지 않고 값을 잠깐 빌려 쓰는 방법입니다. & 로 불변 참조, &mut 로 가변 참조. 핵심 규칙은 한 시점에 (불변 참조 N개) OR (가변 참조 1개), 둘이 섞일 수 없습니다. 이 규칙이 어떻게 데이터 경합을 컴파일 타임에 막아 주는지 살펴봅니다.
08. 슬라이스 — &str 와 &[T]
소유권 · 선수: 07강
슬라이스는 컬렉션의 일부를 빌려서 보는 참조형 뷰입니다. &str 은 String 의 일부 또는 문자열 리터럴 그 자체이고, &[T] 는 Vec<T> 나 배열의 일부에 대한 참조입니다. 슬라이스가 어떻게 함수 인자의 유연성을 폭발적으로 늘려 주는지, 그리고 왜 함수 인자에 String 보다 &str 을 받는 것이 idiomatic 인지 살펴봅니다.
09. 라이프타임 입문 ('a 명시·생략 규칙)
소유권 · 선수: 08강
라이프타임은 참조가 유효한 기간을 표현하는 컴파일 타임 마커입니다. 'a 같은 표기로 명시하지만, 대부분의 경우 컴파일러가 라이프타임 생략(elision) 규칙으로 자동 추론해 줍니다. 이 강의에서 라이프타임이 왜 필요한지, 언제 명시해야 하는지, 그리고 'static 의 의미까지 정리합니다.
10. String 과 &str 깊게 — UTF-8·인덱싱
소유권 · 선수: 09강
Rust 의 문자열은 UTF-8 인코딩으로 저장됩니다. String 은 힙에 사는 가변 소유 문자열, &str 은 그 일부에 대한 참조형 뷰. 문자열 인덱싱이 왜 정수로는 안 되고 .chars() 이터레이터를 거쳐야 하는지, 그리고 UTF-8 의 가변 길이 인코딩 특성을 직관적으로 짚습니다.
타입 시스템
4단원 · struct·enum·패턴 매칭·트레잇
11. 구조체 (named·tuple·unit 구조체)
타입 시스템 · 선수: 소유권 1~5강
구조체(struct) 는 여러 값을 의미 있는 이름으로 묶는 가장 기본적인 사용자 정의 타입입니다. Rust 는 세 가지 형태를 제공합니다 — 필드에 이름이 있는 named struct, 위치만 있는 tuple struct, 데이터가 없는 unit struct. 메서드는 impl 블록에서 따로 정의합니다.
12. 열거형 + Option<T> 입문
타입 시스템 · 선수: 11강
Rust 의 enum 은 C 의 enum 과 차원이 다릅니다 — 각 variant 가 **다른 타입의 데이터를 가질 수 있는** sum type 입니다. 그리고 가장 자주 쓰이는 enum 인 Option<T> (Some(T) 또는 None) 가 어떻게 null pointer 의 1조 달러 실수를 풀어내는지 살펴봅니다.
13. 패턴 매칭 (match·if let·while let)
타입 시스템 · 선수: 12강
Rust 의 패턴 매칭은 다른 언어의 switch 와 격이 다릅니다 — 값 비교뿐 아니라 구조 분해·가드 조건·ref/mut 바인딩까지 한 문법으로. 이 강의에서 match arm 의 다양한 패턴, 가드, range, OR 패턴, 그리고 자주 쓰이는 if let / while let 까지 정리합니다.
14. 트레잇 (정의·구현·기본 메서드·trait object)
타입 시스템 · 선수: 13강
트레잇(trait) 은 "이 타입이 이런 동작을 한다" 는 약속입니다. Java/Kotlin 의 interface, Haskell 의 typeclass 와 비슷한 역할. 기본 메서드 구현, 트레잇 바운드, dyn Trait 의 동적 디스패치까지 한 번에 짚습니다. 표준 라이브러리의 Display·Debug·Iterator 같은 트레잇이 어떻게 다양한 메서드 체이닝을 가능하게 하는지도 살펴봅니다.
에러 처리
4단원 · Result/Option·? 연산자·panic·thiserror
15. Result<T,E> 와 Option<T> 다루기
에러 처리 · 선수: 타입 1~4강
Rust 의 에러 처리는 두 가지 enum 으로 압축됩니다 — Option<T> 는 "값이 없을 수 있다", Result<T,E> 는 "실패할 수 있다". try/catch 가 없는 대신 타입으로 모든 실패를 표현하기 때문에 호출자가 처리하지 않으면 컴파일러가 잡아냅니다. 이 강의에서 두 enum 의 변환·헬퍼 메서드를 한 번에 정리합니다.
16. ? 연산자와 에러 전파
에러 처리 · 선수: 15강
? 연산자는 Result 또는 Option 표현식 뒤에 붙여 "실패면 즉시 함수에서 반환" 을 한 글자로 줄여줍니다. 그래서 여러 단계의 IO·파싱이 깔끔하게 일자로 늘어집니다. From 트레잇을 통해 다른 종류의 에러 타입이 자동 변환되어 전파되는 메커니즘도 함께 살펴봅니다.
17. panic! 과 unrecoverable 에러
에러 처리 · 선수: 16강
panic 은 "여기서부터 회복은 불가능하니 즉시 멈춤" 을 알리는 메커니즘입니다. 배열 범위 초과·integer division by zero·unwrap on None 등이 자동으로 panic 을 일으킵니다. 이 강의에서 panic 의 동작 원리, unwind vs abort, 그리고 panic 을 언제 명시적으로 호출해야 하는지 정리합니다.
18. 커스텀 에러 타입 (thiserror·From)
에러 처리 · 선수: 17강
실무 라이브러리·서비스에서는 Box<dyn Error> 보다 구체적인 에러 타입을 정의해 호출자가 종류별로 분기할 수 있게 합니다. 이 강의에서 enum 으로 자체 에러 타입을 만들고, From 트레잇·Display·Error 트레잇을 손으로 구현해 보고, thiserror 크레잇으로 이걸 한 줄로 줄이는 방법까지 다룹니다.
모던 Rust
4단원 · 모듈/Cargo·테스트·동시성·async
19. 모듈 시스템·Cargo·crates.io
모던 · 선수: 에러 처리 1~4강
Rust 프로젝트가 커지면 코드를 모듈로 나누고 외부 크레잇을 끌어다 씁니다. 이 강의에서 mod 키워드와 파일 분할 규칙, pub 가시성, use 경로, Cargo.toml 의 의존성 명시, 그리고 crates.io 에서 패키지를 찾고 추가하는 흐름까지 한 번에 정리합니다.
20. 단위 테스트·통합 테스트·doctest
모던 · 선수: 19강
Rust 는 테스트 러너가 cargo 에 내장돼 있습니다. #[test] 어트리뷰트를 함수에 붙이면 cargo test 가 자동으로 모아 실행. 단위 테스트(같은 파일의 mod tests), 통합 테스트(tests/ 폴더), 그리고 문서 안의 코드 블록을 자동 실행하는 doctest 까지 한 번에 정리합니다.
21. 스레드·채널·Arc/Mutex
모던 · 선수: 20강
Rust 가 fearless concurrency 를 표방하는 이유는 빌림 검사기가 멀티스레드 데이터 경합까지 컴파일 타임에 막기 때문입니다. 이 강의에서 std::thread, channel(mpsc) 로 스레드 간 메시지, 그리고 공유 상태가 필요할 때의 Arc<Mutex<T>> 패턴까지 한 번에 정리합니다.
22. async/await + tokio 입문
모던 · 선수: 21강
async/await 는 IO 바운드 작업을 효율적으로 동시에 처리하는 비동기 프로그래밍 모델입니다. Rust 의 async 는 런타임이 표준에 포함돼 있지 않아 tokio 같은 외부 크레잇을 선택해 씁니다. 이 강의에서 future 의 개념, async fn 작성, .await 사용, tokio runtime 진입점까지 한 번에 정리합니다.