이제 두 매크로 종류를 다 이해했어. 이 레슨이 그걸 네가 실제로 만날 매크로 — 네 Rust 프로그램을 조용히 돌리는 것들 — 에 뿌리내려.
매일 쓰는 선언적 매크로
println!, format!, vec!, assert!, assert_eq!, panic! — 다 표준 라이브러리의 macro_rules! 매크로야. 함수가 아니라 매크로로 존재하는 건 정확히 가변 인자나 컴파일 타임 포맷 검사가 필요해서야. 이 퀘스트에서 ! 를 칠 때마다 하나를 호출한 거야.
생태계를 움직이는 절차적 매크로
serde 의 #[derive(Serialize, Deserialize)] 가 네 struct 정의에서 직렬화 레이어 전체를 생성해 — Rust 에서 거의 제일 많이 쓰이는 절차적 매크로. #[tokio::main] 이 async 런타임을 부트스트랩하고. #[derive(thiserror::Error)] 가 Error Handling 트랙에서 네 에러 보일러플레이트를 생성했지. 이 매크로들이 Rust 가 시스템 언어인데도 고수준으로 느껴지는 이유야.
핵심
생산적인 Rust 프로그래머가 되려고 매크로를 쓸 필요는 없어 — 읽을 줄 알아야 해: #[derive(...)] 가 뭘 생성하는지 알아보고, ! 가 컴파일 타임 확장이란 걸 알고, 잘 테스트된 생태계 매크로를 믿어. 보일러플레이트가 진짜 함수나 제네릭으로 안 풀릴 때만 직접 써. 그 판단 — 함수 먼저, 매크로 마지막 — 이 성숙한 Rust 의 표식이야.