추상화 ⑥ trait·제네릭 — 인터페이스와 템플릿을 하나로
C++의 인터페이스·템플릿·concept에 해당하는 Rust 추상화의 중심. 공유 동작을 정의하는 trait, 제약을 미리 선언해 에러가 친절한 제네릭 + trait bound, 런타임 다형성(dyn)과 컴파일 타임 단형화의 트레이드오프, 그리고 라이브러리 설계에서 만나는 orphan rule까지. C++ 템플릿의 '일단 쓰고 안 되면 에러' 습관을 교정한다.
C++의 인터페이스·템플릿·concept에 해당하는 Rust 추상화의 중심. 공유 동작을 정의하는 trait, 제약을 미리 선언해 에러가 친절한 제네릭 + trait bound, 런타임 다형성(dyn)과 컴파일 타임 단형화의 트레이드오프, 그리고 라이브러리 설계에서 만나는 orphan rule까지. C++ 템플릿의 '일단 쓰고 안 되면 에러' 습관을 교정한다.
Rust에도 예외가 없다. 대신 ③의 enum으로 에러를 표현한다. null을 없앤 Option(Some/None), 성공·실패를 값으로 나르는 Result(Ok/Err), 에러를 상위로 전파하는 ? 연산자, 그리고 실전 표준인 thiserror·anyhow까지. unwrap 남발 대신 제대로 다루는 습관을 잡는다.
Vec·HashMap은 C++ 컨테이너 대응이라 쉽지만, String과 &str의 구분이 Rust 입문자를 가장 헷갈리게 한다. String(소유·힙)과 &str(빌린 문자열 슬라이스)의 차이는 ②의 소유권과 직결되고, '받을 땐 &str로 빌리고 줄 때만 String으로 소유'가 소유권 기반 API 설계의 첫 감각이다. 함수 인자를 뭘로 받을지까지 정리한다.
Rust 타입 시스템은 C++보다 강력하고 특히 enum이 다르다. 데이터는 struct, 동작은 impl 블록. 각 variant가 데이터를 품는 대수적 타입 enum(Option·Result가 여기서 나온다), 그리고 모든 경우를 강제로 다루게 하는 완전성 검사 패턴 매칭 match·if let까지. enum을 '이름 붙은 정수'로만 보던 C++ 습관을 교정한다.
Rust의 소유권·빌림·수명을 C++의 RAII·이동·참조를 발판으로 설명하되, 같은 의미론으로 등치하지 않는다. move, &/&mut, lifetime이 어떤 안전 계약을 강제하는지 정리한다.
Rust의 기본 태도를 잡는 단계. let은 기본 불변이고 mut로만 가변, if·블록이 값을 반환하는 표현식 기반 문법, 같은 이름을 다시 선언하는 shadowing, 그리고 빌드·테스트·의존성을 하나로 묶은 cargo까지. C++의 기본 가변·문장 기반 습관과 무엇이 다른지 예제로 정리한다.
C++ 배경에서 Rust로 넘어올 때의 학습 순서를 기초·소유권·타입·트레이트·반복자·에러·동시성·도구로 묶고, 각 주제를 필수·나중·선택으로 표시한 로드맵. C++ 개념(RAII·이동·스마트 포인터)과의 대응뿐 아니라 반복자·클로저·매크로·소유권 기반 설계 같은 Rust 고유 축을 줄기로 넣었다. 정본 교재(The Rust Book·rustlings) 링크와 자주 막히는 지점을 함께 정리한, 배우면서 채우는 진행형 인덱스.
Go는 도구가 언어에 내장돼 있어 CMake 같은 외부 빌드 시스템이 필요 없다. build·run·test 명령 하나씩, 스타일을 언어 표준으로 강제하는 gofmt(논쟁이 사라진다), go.mod 의존성 관리, 그리고 go vet·staticcheck 정적 분석까지. C++의 파편화된 도구 생태계와 비교하며 로드맵을 마무리한다.
문법을 넘어 실제로 뭔가 만들고 Go답게 쓰는 단계. net/http만으로 서버를 세우고, encoding/json과 struct tag로 매핑하고, 'accept interfaces, return structs' 같은 Effective Go 관용구를 익히고, 테이블 주도 테스트로 go test를 쓴다. struct tag를 먹게 하는 reflection의 정체까지.
goroutine을 단순한 경량 스레드로 등치하지 않고 Go 런타임이 스케줄링하는 경량 실행 단위로 설명한다. channel·select·context·WaitGroup·Mutex·race detector의 역할을 구분한다.