[Rust 공식문서 한국어 정리] 132. Rust Box<T> 가이드
[Rust 공식문서 한국어 정리] 132. Rust Box 가이드
원문 제목: Struct std::boxed::Box
작성자: The Rust Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Box가 제공하는 힙 기반 단일 소유권 스마트 포인터를 상세히 다룹니다.
Box가 스택과 힙의 경계를 넘어 데이터를 저장하는 원리를 학습합니다.
재귀적 타입, 대용량 데이터, 트레이트 객체 등에서 Box가 필요한 이유를 정리합니다.
Box::new, Box::leak, Box::from_raw 등 다양한 생성과 변환 방법을 설명합니다.
Box와 소유권, Deref, Drop의 관계를 다룹니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① Box — 힙에 할당된 T의 단일 소유자
② 스택-힙 분리 — 데이터는 힙, 포인터는 스택
③ Deref — Box를 투명하게 역참조
④ Drop — 스코프 종료 시 힙 메모리 자동 해제
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Box는 힙에 할당된 T의 단일 소유자입니다.
Box::new(value)로 힙에 값을 할당하고 Box를 반환합니다.
Box의 크기는 포인터 크기와 동일하며 데이터 자체는 힙에 저장됩니다.
Box는 Deref를 구현하므로 *box나 box.method()로 직접 접근할 수 있습니다.
Box가 스코프를 벗어나면 Drop이 호출되어 힙 메모리가 자동 해제됩니다.
재귀적 타입을 정의할 때 Box가 필수적입니다.
예를 들어 enum List { Cons(i32, Box), Nil }처럼 사용합니다.
Box 없이 재귀적 타입을 정의하면 컴파일러가 타입의 크기를 계산할 수 없습니다.
Box::leak는 힙 메모리를 &'static T로 변환합니다.
leak된 메모리는 프로그램 종료까지 해제되지 않습니다.
Box::into_raw는 Box를 원시 포인터 *mut T로 변환합니다.
이후 unsafe로 from_raw를 호출하여 다시 Box로 복원할 수 있습니다.
Box는 트레이트 객체를 힙에 할당합니다.
Box는 Pin과 함께 사용하여 이동 불가능한 힙 데이터를 표현할 수 있습니다.
Box는 Rc나 Arc보다 가벼운 단일 소유자로 참조 카운팅 오버헤드가 없습니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
재귀적 데이터 구조(리스트, 트리)를 정의할 때 Box를 사용합니다.
대용량 데이터를 스택 대신 힙에 할당하여 스택 오버플로우를 방지합니다.
트레이트 객체 dyn Trait를 힙에 저장할 때 Box를 사용합니다.
Box::leak로 'static 참조가 필요한 전역 설정 데이터를 생성합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Box는 힙 기반 단일 소유 스마트 포인터입니다.
재귀적 타입, 대용량 데이터, 트레이트 객체 저장에 필수적입니다.
Deref와 Drop으로 원시 포인터처럼 사용하면서도 메모리 안전을 보장합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/std/boxed/struct.Box.html
Box Methods: https://doc.rust-lang.org/std/boxed/struct.Box.html
#Rust #Box #힙할당 #스마트포인터 #번역

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