소유권 심화 ⑧ 스마트 포인터 — Box·Rc·RefCell
②의 소유권 규칙이 너무 빡빡할 때 푸는 도구. C++ 스마트 포인터와 거의 1:1이라 C++ 배경이 크게 유리한 구간이다. 힙 할당 Box(unique_ptr), 참조 카운트 공유 Rc/Arc(shared_ptr), 빌림 검사를 런타임으로 미루는 Rust 특유의 내부 가변성 RefCell/Cell, 순환 참조를 끊는 Weak까지. Rc
②의 소유권 규칙이 너무 빡빡할 때 푸는 도구. C++ 스마트 포인터와 거의 1:1이라 C++ 배경이 크게 유리한 구간이다. 힙 할당 Box(unique_ptr), 참조 카운트 공유 Rc/Arc(shared_ptr), 빌림 검사를 런타임으로 미루는 Rust 특유의 내부 가변성 RefCell/Cell, 순환 참조를 끊는 Weak까지. Rc
C++ 대응이 흐릿한, Rust에서 새로 배우는 축. 여길 건너뛰면 'C++을 Rust 문법으로 쓴' 코드가 된다. 환경 캡처 방식이 소유권과 맞물리는 클로저(Fn/FnMut/FnOnce), for문 대신 iter().map().filter().collect()로 짜는 lazy하고 zero-cost한 반복자 체인까지. 인덱스 루프 습관을 교정한다.
gpakosz/.tmux(Oh My Tmux!)의 2파일 구조와 자동 소싱, vanilla tmux 대비 바꾸는 것(C-a 보조 prefix·vi 복사·SSH-aware 상태바), .tmux.conf.local 커스터마이징 워크플로(tmux_conf_* 노브·#!important·플러그인 자동 관리), 기본 키맵 요점과 stock 키맵을 지키는 tmux_conf_preserve_stock_bindings까지 — 채택 전에 '무엇을 상속하는지' 한 장으로.
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를 같은 의미론으로 등치하지 않고, 소유권·빌림·수명, enum·match, Result·Option, trait·generics, iterator·closure를 핵심 줄기로 잡고 smart pointer·concurrency·tooling·unsafe를 Branch로 분리한 학습 지도.