[Rust 공식문서 한국어 정리] 111. Rust 'static 라이프타임 가이드
[Rust 공식문서 한국어 정리] 111. Rust 'static 라이프타임 가이드
원문 제목: static lifetime
작성자: The Rust Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
'static 라이프타임이 의미하는 바와 사용되는 다양한 맥락을 상세히 다룹니다.
프로그램 전체 실행 기간 동안 유효한 참조와 'static 바운드의 차이를 학습합니다.
문자열 리터럴, 전역 변수, Box::leak 등 'static을 얻는 방법을 정리합니다.
스레드 스폰, Any 다운캐스트 등에서 'static 바운드가 요구되는 이유를 설명합니다.
'static이 모든 참조를 의미하는 것은 아님을 명확히 하는 것이 목표입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① 'static 라이프타임 — 프로그램 종료까지 유효한 참조
② 문자열 리터럴 — &str 타입이 'static 라이프타임을 가짐
③ 'static 바운드 — 소유 타입만 허용하는 제약
④ Box::leak — 힙 메모리를 'static 참조로 변환
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
'static은 프로그램 전체 실행 기간 동안 유효한 라이프타임입니다.
모든 문자열 리터럴은 바이너리에 포함되므로 &'static str 타입을 가집니다.
예를 들어 let s: &'static str = "hello";에서 s는 프로그램 종료까지 유효합니다.
'static은 참조뿐 아니라 소유 타입에도 적용될 수 있습니다.
제네릭 경계 T: 'static은 T가 프로그램 종료까지 유효함을 의미합니다.
이 때 T가 소유 타입이면 항상 'static입니다.
소유 타입(String, Vec, i32 등)은 'static 바운드를 만족합니다.
반면 &'a str은 'a가 'static이 아니라면 'static 바운드를 만족하지 않습니다.
스레드를 spawn할 때 클로저가 캡처한 데이터는 'static이어야 합니다.
이는 새 스레드가 메인 스레드보다 오래 살 수 있기 때문입니다.
Any 트레이트의 downcast 메서드는 'static 바운드를 요구합니다.
이는 타입 정보가 런타임에 안전하게 유지되어야 하기 때문입니다.
Box::leak는 힙에 할당한 데이터를 &'static mut T로 변환합니다.
leak된 메모리는 프로그램 종료까지 해제되지 않으므로 주의가 필요합니다.
lazy_static이나 once_cell은 'static 수명의 전역 상태를 안전하게 제공합니다.
const 변수도 'static 수명을 가지며 컴파일 타임에 평가됩니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
문자열 리터럴을 설정값이나 에러 메시지로 사용하여 'static 참조를 활용합니다.
스레드 spawn 시 클로저 캡처 데이터가 'static임을 보장합니다.
Box::leak로 설정 데이터를 'static 참조로 변환하여 전역 접근을 제공합니다.
lazy_static으로 초기화 비용이 큰 'static 데이터를 한 번만 생성합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
'static은 프로그램 전체 기간 유효함을 나타내는 특별한 라이프타임입니다.
문자열 리터럴, 소유 타입, leak된 데이터가 'static을 만족합니다.
스레드와 Any 등에서 'static 바운드가 안전성을 보장합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/rust-by-example/scope/lifetime/static_lifetime.html
Rust By Example: https://doc.rust-lang.org/rust-by-example/
#Rust #static #라이프타임 #번역

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