[Rust 공식문서 한국어 정리] 133. Rust Rc<T> 가이드
[Rust 공식문서 한국어 정리] 133. Rust Rc 가이드
원문 제목: Struct std::rc::Rc
작성자: The Rust Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Rc가 제공하는 단일 스레드 참조 카운팅 스마트 포인터를 상세히 다룹니다.
Rc의 참조 카운팅 메커니즘과 메모리 해제 시점을 학습합니다.
Rc와 Box, Arc의 차이, 그리고 Rc가 Send/Sync가 아닌 이유를 정리합니다.
Rc::clone, Rc::strong_count, Weak 참조 등 고급 기능을 설명합니다.
순환 참조 문제와 Weak로 이를 해결하는 방법을 다룹니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① Rc — 단일 스레드 참조 카운팅 스마트 포인터
② clone — 참조 카운트 증가, 데이터 복제 아님
③ Weak — 참조 카운트에 포함되지 않는 약한 참조
④ 순환 참조 — Rc 순환 시 메모리 누수, Weak로 해결
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Rc는 단일 스레드 환경에서 여러 소유자가 데이터를 공유할 수 있게 합니다.
Rc::new(value)로 데이터를 힙에 할당하고 Rc를 반환합니다.
Rc::clone(&rc)는 참조 카운트를 증가시키며 데이터를 실제로 복제하지 않습니다.
Rc가 Drop될 때 참조 카운트가 감소하고 카운트가 0이 되면 힙 메모리가 해제됩니다.
Rc는 Send와 Sync가 아닙니다.
참조 카운트는 원자적이지 않으므로 여러 스레드에서 Rc를 공유하면 데이터 경쟁이 발생합니다.
스레드 간 공유가 필요하면 Arc를 사용합니다.
Rc::strong_count(&rc)로 현재 강한 참조 카운트를 확인합니다.
Rc::weak_count는 약한 참조 카운트를 반환합니다.
Weak는 Rc::downgrade로 생성하며 강한 참조 카운트에 포함되지 않습니다.
Weak는 upgrade()를 통해 Option>로 복원할 수 있습니다.
upgrade가 None을 반환하면 원본 데이터가 이미 해제된 것입니다.
순환 참조는 두 Rc가 서로를 가리킬 때 발생하며 메모리 누수를 유발합니다.
부모-자식 관계에서 자식이 부모를 Weak로 가리키면 순환을 끊을 수 있습니다.
Rc는 Deref를 구현하여 내부 데이터에 투명하게 접근합니다.
Rc는 내부 가변성이 없으므로 데이터 수정은 Cell, RefCell 등과 함께 사용해야 합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
단일 스레드에서 여러 부분이 동일 데이터를 공유할 때 Rc를 사용합니다.
그래프의 노드 간 공유 ownership을 Rc로 표현합니다.
순환 구조에서는 일부 링크를 Weak로 사용하여 메모리 누수를 방지합니다.
스레드가 필요하면 Rc 대신 Arc로 교체합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Rc는 단일 스레드 참조 카운팅으로 다중 소유권을 구현합니다.
clone은 참조 카운트만 증가시켜 효율적인 공유를 제공합니다.
순환 참조는 Weak로 해결하며 스레드 공유에는 Arc를 사용합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/std/rc/struct.Rc.html
Rc Methods: https://doc.rust-lang.org/std/rc/struct.Rc.html
#Rust #Rc #참조카운팅 #단일스레드 #번역

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30