Curriculum
๐ฆ Rust ํ์ต ์ปค๋ฆฌํ๋ผ (40์ผ ์์ฑ)
-
Phase 1: Foundation (Day 1-13)
- Day 1-2: Setup & Basic Syntax
- Day 3-5: Ownership
- Day 6-8: References & Borrowing
- Day 9-10: Structs & Methods
- Day 11-13: Enums & Pattern Matching
- Phase 1 ์ข ํฉ ๋ฆฌ๋ทฐ
-
Phase 2: Data & Functional (Day 14-20)
- Day 14-15: Collections
- Day 16-17: Slices ์ฌํ & String ๋ด๋ถ
- Day 18-20: Iterators & Closures
-
Phase 3: Type System & Error Handling (Day 21-28)
- Day 21-22: Error Handling ์ฌํ
- Day 23-26: Traits & Generics
- Day 27-28: Lifetimes
-
Phase 4: Advanced & Ecosystem (Day 29-34)
- Day 29-30: Smart Pointers (Box, Rc, Arc, RefCell)
- Day 31-32: Concurrency ๊ธฐ์ด
- Day 33-34: Type Conversions & Common Patterns
-
Phase 5: Project Infrastructure (Day 35-38)
- Day 35-36: Modules, Testing & Project Structure
- Day 37-38: ์ค์ ํฌ๋ ์ดํธ ์ํ๊ณ (serde, clap, thiserror, anyhow)
-
Phase 6: Advanced Concepts (Day 39-40)
- Day 39-40: Macro ๊ธฐ์ด & Unsafe ์ธ์
Phase 1: Foundation (Day 1-13)
Rust์ ํต์ฌ ์ฒ ํ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ๊ธฐ๋ฐ์ ์ธ์ฐ๋ ๋จ๊ณ
Day 1-2: Setup & Basic Syntax
| ์ฃผ์ | ํต์ฌ ๊ฐ๋ |
|---|---|
| Cargo | new, build, run, check ์ํฌํ๋ก์ฐ |
| ๋ณ์ | ๊ธฐ๋ณธ immutable, mut ๋ช
์, shadowing (ํ์
๋ณ๊ฒฝ ๊ฐ๋ฅ) |
| ํ์ | ์ ์(i32), ์ค์(f64), bool, char, ํํ, ๋ฐฐ์ด |
| ์ ์ด ํ๋ฆ | if/else, loop, while, for, ๋ชจ๋ expression |
Python๊ณผ์ ํต์ฌ ์ฐจ์ด: Rust๋ ๊ธฐ๋ณธ immutable (Python์ ๊ธฐ๋ณธ mutable)
Day 3-5: Ownership
| ์ฃผ์ | ํต์ฌ ๊ฐ๋ |
|---|---|
| ์์ ๊ถ 3์์น | ๊ฐ๋ง๋ค ์์ ์ ํ๋, ์ค์ฝํ ๋๋๋ฉด drop, ํ ๋ฒ์ ํ๋ |
| Move | Heap ํ์
(String, Vec) ๋์
์ ์์ ๊ถ ์ด๋ |
| Copy | Stack ํ์
(i32, bool, char) ๋์
์ ๋นํธ ๋ณต์ฌ |
| Clone | Heap ํ์
์ ๋ช
์์ ๊น์ ๋ณต์ฌ (.clone()) |
| ํจ์ ์ ๋ฌ | ํจ์์ ๊ฐ์ ๋๊ธฐ๋ฉด ์์ ๊ถ๋ ์ด๋ (Move semantics) |
ํต์ฌ ํต์ฐฐ: double-free ๋ฐฉ์ง๋ฅผ ์ํ ์ปดํ์ผ ํ์ ๋ณด์ฅ
Day 6-8: References & Borrowing
| ์ฃผ์ | ํต์ฌ ๊ฐ๋ |
|---|---|
| ํต์ฌ ๊ท์น | &T ์ฌ๋ฌ ๊ฐ OR &mut T ํ๋ (๋์ ๊ณต์กด ๋ถ๊ฐ) |
| ๋ชฉ์ | data race๋ฅผ ์ปดํ์ผ ํ์์ ๋ฐฉ์ง |
| NLL | Non-Lexical Lifetimes โ ์ฐธ์กฐ์ ์๋ช ์ ๋ง์ง๋ง ์ฌ์ฉ ์์ ๊น์ง |
| ์ต์ ๊ถํ | ์ฝ๊ธฐ๋ง ํ๋ฉด &, ์์ ํ์ํ๋ฉด &mut |
Python๊ณผ์ ํต์ฌ ์ฐจ์ด: Python ์ฐธ์กฐ๋ ํญ์ ์์ ๊ฐ๋ฅ, Rust &๋ ๊ธฐ๋ณธ ์ฝ๊ธฐ ์ ์ฉ
Day 9-10: Structs & Methods
| ์ฃผ์ | ํต์ฌ ๊ฐ๋ |
|---|---|
| struct | ๋ฐ์ดํฐ ์ ์ (Python class์ ํ๋ ๋ถ๋ถ) |
| impl | ๋์ ์ ์ (๋ฐ์ดํฐ์ ๋ถ๋ฆฌ) |
| self 3์ข | &self(์ฝ๊ธฐ), &mut self(์์ ), self(์๋น) |
| Associated fn | Self::new() โ self ์์ด ํธ์ถ (:: ์ฌ์ฉ) |
| Struct update | ..other๋ก ๋๋จธ์ง ํ๋ ๋ณต์ฌ (Move ์ฃผ์) |
ํต์ฌ ํต์ฐฐ: &self = ์์ ๊ถ ๋ณด์กด, self = ์์ ๊ถ ์๋น
Day 11-13: Enums & Pattern Matching
| ์ฃผ์ | ํต์ฌ ๊ฐ๋ |
|---|---|
| enum | variant๋ง๋ค ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ์ ์์ |
| match | exhaustiveness โ ๋ชจ๋ variant ์ฒ๋ฆฌ ํ์ |
| Option<T> | Some(T) / None โ Rust์ null ๋์ฒด |
| Result<T, E> | Ok(T) / Err(E) โ ์๋ฌ ์ฒ๋ฆฌ์ ๊ธฐ๋ณธ |
| if let | ํ๋์ ํจํด๋ง ์ฒ๋ฆฌํ ๋ match์ ๊ฐ๊ฒฐํ ๋์ |
| Combinators | map, and_then, unwrap_or, ok_or ๋ฑ |
ํต์ฌ ํต์ฐฐ: Option/Result = ์์ ํ ๊ฐ ์ฒ๋ฆฌ์ ํ์ค ํจํด
Phase 2: Data & Functional (Day 14-20)
์ปฌ๋ ์ , ๋ฌธ์์ด ๋ด๋ถ ๊ตฌ์กฐ, ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจํด์ ์ตํ๋ ๋จ๊ณ
Day 14-15: Collections
| ์ฃผ์ | ํต์ฌ ๊ฐ๋ |
|---|---|
| Vec<T> | ๋์ ๋ฐฐ์ด, push/pop/get/์ธ๋ฑ์ฑ |
| HashMap<K, V> | ํค-๊ฐ ์ ์ฅ์, insert/get/entry API |
| entry API | or_insert, and_modify โ ์กฐ๊ฑด๋ถ ์ฝ์
/์์ |
| Ownership | ์ปฌ๋ ์ ์ ๊ฐ์ ๋ฃ์ผ๋ฉด ์์ ๊ถ ์ด๋ |
| Borrowing ์ถฉ๋ | &v[0] ์ด์์์ ๋ v.push() ๋ถ๊ฐ (์ฌํ ๋น ์ํ) |
Python ๋์: list โ Vec, dict โ HashMap
Day 16-17: Slices ์ฌํ & String ๋ด๋ถ
| ์ฃผ์ | ํต์ฌ ๊ฐ๋ |
|---|---|
&[T] / &str | ์ฌ๋ผ์ด์ค = fat pointer (ํฌ์ธํฐ + ๊ธธ์ด) |
| String vs &str | String(์์ , Heap) vs &str(๋น๋ฆผ, ์ด๋์๋ ) |
| UTF-8 | Rust ๋ฌธ์์ด์ UTF-8, ์ธ๋ฑ์ฑ ๋ถ๊ฐ (s[0] โ) |
| ๋ฌธ์์ด ์ ๊ทผ | .chars(), .bytes(), .char_indices() |
| ๋ณํ | &String โ &str (์๋ deref), &str โ String (.to_string()) |
ํต์ฌ ํต์ฐฐ: fat pointer = (๋ฐ์ดํฐ ํฌ์ธํฐ, ๊ธธ์ด) โ ์์ ํ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ํต์ฌ
Day 18-20: Iterators & Closures
| ์ฃผ์ | ํต์ฌ ๊ฐ๋ |
|---|---|
| Iterator trait | .next() โ Option<Item>, lazy evaluation |
| ์ด๋ํฐ | map, filter, enumerate, zip, take, skip, chain |
| ์๋น์ | collect, sum, count, any, all, find, fold |
| Closures | |args| body, ํ๊ฒฝ ์บก์ฒ (&, &mut, move) |
| Fn traits | Fn(๋ถ๋ณ ๋น๋ฆผ), FnMut(๊ฐ๋ณ ๋น๋ฆผ), FnOnce(์๋น) |
| ์์ ๊ถ ์ฐ๊ฒฐ | .iter()(&T), .iter_mut()(&mut T), .into_iter()(T) |
Python ๋์: list comprehension โ .iter().filter().map().collect()
Phase 3: Type System & Error Handling (Day 21-28)
Rust ํ์ ์์คํ ์ ํต์ฌ โ Traits, Generics, Lifetimes๋ก ์ถ์ํ ๋ฅ๋ ฅ์ ํ์ฅ
Day 21-22: Error Handling ์ฌํ
| ์ฃผ์ | ํ์ต ๋ด์ฉ |
|---|---|
? ์ฐ์ฐ์ | ์๋ฌ ์๋ ์ ํ โ match/unwrap ๋์ ๊ฐ๊ฒฐํ ์๋ฌ ์ฒ๋ฆฌ |
| ์ปค์คํ ์๋ฌ | enum์ผ๋ก ๋๋ฉ์ธ ์๋ฌ ํ์
์ ์ |
| From trait | ?๊ฐ ์๋ฌ ํ์
์ ์๋ ๋ณํํ๋ ๋ฉ์ปค๋์ฆ |
| ์๋ฌ ์ ๋ต | panic! vs Result โ ์ธ์ ์ด๋ค ๊ฒ์ ์ธ์ง |
| ์ค์ ํจํด | ํ์ผ I/O, ํ์ฑ ๋ฑ์์์ ์๋ฌ ์ฒ๋ฆฌ ์ฒด์ธ |
์ ์ ์ง์: Phase 1์ Result<T, E>, Option<T>, enum, pattern matching
Day 23-26: Traits & Generics
| ์ฃผ์ | ํ์ต ๋ด์ฉ |
|---|---|
| Trait ์ ์ | trait = ์ธํฐํ์ด์ค โ ๊ณต์ ํ๋ ์ ์ |
| Trait ๊ตฌํ | impl Trait for Type |
| ํ์ค Traits | Display, Debug, Clone, PartialEq, Iterator ๋ฑ |
| derive ๋งคํฌ๋ก | #[derive(Debug, Clone, PartialEq)] ์๋ ๊ตฌํ |
| Generics | fn process<T>(item: T) โ ํ์
ํ๋ผ๋ฏธํฐ |
| Trait Bounds | <T: Display + Clone> โ ์ ๋ค๋ฆญ์ ์ ์ฝ ์ถ๊ฐ |
| where ์ | ๋ณต์กํ bounds๋ฅผ ๊น๋ํ๊ฒ ํํ |
| impl Trait | ํจ์ ์ธ์/๋ฐํ์์์ trait ํ์ฉ |
Python ๋์: ABC(Abstract Base Class) โ trait, duck typing โ trait bounds
Day 27-28: Lifetimes
| ์ฃผ์ | ํ์ต ๋ด์ฉ |
|---|---|
| Lifetime์ด๋ | ์ฐธ์กฐ๊ฐ ์ ํจํ ๋ฒ์๋ฅผ ๋ช ์ํ๋ ์ด๋ ธํ ์ด์ |
'a ๋ฌธ๋ฒ | fn longest<'a>(x: &'a str, y: &'a str) -> &'a str |
| Lifetime elision | ์ปดํ์ผ๋ฌ๊ฐ ์๋ ์ถ๋ก ํ๋ 3๊ฐ์ง ๊ท์น |
| Struct์ lifetime | ์ฐธ์กฐ๋ฅผ ๋ด๋ struct์ 'a ํ์ |
'static | ํ๋ก๊ทธ๋จ ์ ์ฒด ์๋ช ๋์ ์ ํจํ ์ฐธ์กฐ |
ํต์ฌ ๋ชฉํ: "dangling reference ๋ฐฉ์ง"๋ฅผ ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ป๊ฒ ๋ณด์ฅํ๋์ง ์ดํด
Phase 4: Advanced & Ecosystem (Day 29-34)
ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋์์ฑ์ ๊ธฐ์ด โ Rust์ ๊ณ ๊ธ ๋ฉ๋ชจ๋ฆฌ ํจํด
Day 29-30: Smart Pointers
| ์ฃผ์ | ํ์ต ๋ด์ฉ |
|---|---|
| Box<T> | ํ ํ ๋น, ์ฌ๊ท ํ์ , trait object |
| Rc<T> | ์ฐธ์กฐ ์นด์ดํ โ ์ฌ๋ฌ ์์ ์ (์ฑ๊ธ ์ค๋ ๋) |
| Arc<T> | ์์์ ์ฐธ์กฐ ์นด์ดํ (๋ฉํฐ ์ค๋ ๋) |
| RefCell<T> | ๋ฐํ์ borrow checking โ interior mutability |
| Deref trait | ์ค๋งํธ ํฌ์ธํฐ์ ์๋ ์ญ์ฐธ์กฐ |
Python ๋์: Python์ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ์ฌ์ค์ Rc<RefCell<T>>์ ๋น์ทํ ๊ตฌ์กฐ
Day 31-32: Concurrency ๊ธฐ์ด
| ์ฃผ์ | ํ์ต ๋ด์ฉ |
|---|---|
| std::thread | ์ค๋ ๋ ์์ฑ๊ณผ join |
| move closure | ํด๋ก์ ๊ฐ ํ๊ฒฝ์ ์์ ๊ถ์ผ๋ก ์บก์ฒ |
| Send / Sync | ์ค๋ ๋ ๊ฐ ๋ฐ์ดํฐ ์ ์ก ์์ ์ฑ trait |
| Mutex<T> | ์ํธ ๋ฐฐ์ โ lock() โ MutexGuard |
| Arc + Mutex | ๋ฉํฐ ์ค๋ ๋ ๊ณต์ ๋ฐ์ดํฐ์ ํ์ค ํจํด |
| ์ฑ๋ | mpsc::channel โ ๋ฉ์์ง ํจ์ฑ |
ํต์ฌ ๋ชฉํ: "fearless concurrency" โ ์ปดํ์ผ ํ์์ data race ๋ฐฉ์ง
Day 33-34: Type Conversions & Common Patterns
| ์ฃผ์ | ํ์ต ๋ด์ฉ |
|---|---|
| From / Into | ํ์ ๋ณํ์ ํ์ค trait |
| TryFrom / TryInto | ์คํจ ๊ฐ๋ฅํ ๋ณํ (โ Result) |
| AsRef / AsMut | ์ ๋ ดํ ์ฐธ์กฐ ๋ณํ |
| Display / ToString | ๋ฌธ์์ด ํํ |
| Iterator ์ฌํ | ์ปค์คํ Iterator ๊ตฌํ |
| Builder ํจํด | ๋ณต์กํ ๊ตฌ์กฐ์ฒด ์์ฑ ํจํด |
| Newtype ํจํด | ํ์ ์์ ์ฑ์ ์ํ ๋ํผ |
Phase 5: Project Infrastructure (Day 35-38)
์ค์ ํ๋ก์ ํธ๋ฅผ ์ํ ๊ตฌ์กฐํ, ํ ์คํ , ์ํ๊ณ ํ์ฉ
Day 35-36: Modules, Testing & Project Structure
| ์ฃผ์ | ํ์ต ๋ด์ฉ |
|---|---|
| mod ์์คํ | mod, use, pub โ ์ฝ๋ ๊ตฌ์กฐํ |
| ํ์ผ ๊ตฌ์กฐ | lib.rs vs main.rs, ๋ชจ๋ ํธ๋ฆฌ |
| ๊ฐ์์ฑ | pub, pub(crate), pub(super) |
| #[test] | ๋จ์ ํ
์คํธ, assert!, assert_eq! |
| #[cfg(test)] | ํ ์คํธ ๋ชจ๋ ๋ถ๋ฆฌ |
| Integration test | tests/ ๋๋ ํ ๋ฆฌ, ํตํฉ ํ
์คํธ |
| Documentation | /// doc comment, cargo doc |
Python ๋์: import โ use, __init__.py โ mod.rs
Day 37-38: ์ค์ ํฌ๋ ์ดํธ ์ํ๊ณ
| ํฌ๋ ์ดํธ | ์ฉ๋ | Python ๋์ |
|---|---|---|
| serde + serde_json | ์ง๋ ฌํ/์ญ์ง๋ ฌํ | json ๋ชจ๋ |
| clap | CLI ์ธ์ ํ์ฑ | argparse |
| thiserror | ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฉ ์๋ฌ ์ ์ | ์ปค์คํ Exception |
| anyhow | ์ ํ๋ฆฌ์ผ์ด์ ์ฉ ์๋ฌ ์ฒ๋ฆฌ | ์ผ๋ฐ Exception ์ฒ๋ฆฌ |
| tokio (์๊ฐ) | ๋น๋๊ธฐ ๋ฐํ์ | asyncio |
ํต์ฌ ๋ชฉํ: Cargo.toml ์์กด์ฑ ๊ด๋ฆฌ + ์ค์ ์์ ์์ฃผ ์ฐ๋ ํฌ๋ ์ดํธ ์ฒดํ
Phase 6: Advanced Concepts (Day 39-40)
Rust์ ๋ฉํํ๋ก๊ทธ๋๋ฐ๊ณผ ์์ ์ฑ ๊ฒฝ๊ณ๋ฅผ ์ดํดํ๋ ๋ง๋ฌด๋ฆฌ ๋จ๊ณ
Day 39-40: Macro ๊ธฐ์ด & Unsafe ์ธ์
| ์ฃผ์ | ํ์ต ๋ด์ฉ |
|---|---|
| ์ ์ธ์ ๋งคํฌ๋ก | macro_rules! โ vec![], println!์ ์๋ฆฌ |
| ๋งคํฌ๋ก ํจํด | ๋ฐ๋ณต($()*), ๋งค์นญ, ํ ํฐ ํธ๋ฆฌ |
| ์ ์ฐจ์ ๋งคํฌ๋ก | derive macro ๊ฐ๋ ์ดํด (๊น์ด ํ์ง๋ ์์) |
| unsafe ํค์๋ | ์์ ํ Rust๊ฐ ํ ์ ์๋ 5๊ฐ์ง |
| unsafe ์ฌ์ฉ์ฒ | raw pointer, FFI, unsafe impl |
| ์ฒ ํ | unsafe = "๋ด๊ฐ ์์ ์ฑ์ ๋ณด์ฅํ๊ฒ ๋ค"๋ ์ ์ธ |
ํต์ฌ ๋ชฉํ: ๋งคํฌ๋ก์ ๋์ ์๋ฆฌ ์ดํด + unsafe์ ์กด์ฌ ์ด์ ์ ์ฌ์ฉ ๊ธฐ์ค ์ธ์