[Rust 공식문서 한국어 정리] 99. Rust Drop 트레이트 가이드
[Rust 공식문서 한국어 정리] 99. Rust Drop 트레이트 가이드
원문 제목: Trait std::ops::Drop
작성자: The Rust Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Drop 트레이트가 제공하는 RAII 기반 자원 해제 메커니즘을 상세히 다룹니다.
값이 스코프를 벗어날 때 자동으로 호출되는 소멸자의 동작 원리를 학습합니다.
메모리 누수 방지, 파일 핸들 해제, 임시 리소스 정리 등의 패턴을 정리합니다.
Drop 구현 시 주의사항과 이중 해제 방지 방법을 설명합니다.
std::mem::forget과 ManuallyDrop으로 소멸자 호출을 제어하는 방법도 함께 다룹니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① drop 메서드 — 값 소멸 시 자동 호출되는 정리 메서드
② RAII — 자원 획득 시 초기화, 스코프 종료 시 자동 해제
③ 소멸자 순서 — 필드의 역순으로 Drop 호출
④ ManuallyDrop — 소멸자 자동 호출을 명시적으로 억제
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Drop 트레이트는 값의 라이프타임이 종료될 때 실행되는 소멸자를 정의합니다.
drop 메서드는 &mut self를 받으며 소유권을 반환하지 않습니다.
스코프가 종료되면 컴파일러가 자동으로 해당 변수의 drop을 호출합니다.
구조체의 필드는 선언된 순서의 역순으로 소멸됩니다.
벡터나 트리 같은 컬렉션은 각 요소가 역순으로 drop됩니다.
Drop은 패닉이 발생해도 스택 언와인딩 과정에서 호출됩니다.
단 abort 모드에서는 스택 언와인딩이 생략되어 Drop이 호출되지 않을 수 있습니다.
Drop 구현 내에서 panic이 발생하면 abort로 전환됩니다.
이는 이중 패닉을 방지하기 위한 안전 장치입니다.
std::mem::drop 함수는 값을 소비하여 즉시 소멸자를 호출합니다.
std::mem::forget은 값의 소멸자 호출을 영구히 억제합니다.
forget은 메모리 누수를 유발할 수 있으므로 주의해서 사용해야 합니다.
ManuallyDrop는 컴파일러가 자동으로 drop을 호출하지 않게 막습니다.
ManuallyDrop은 unsafe 블록에서 직접 drop을 호출하거나 완전히 생략할 수 있습니다.
FFI나 메모리 맵과 같이 소멸자 호출 시점을 수동으로 제어해야 할 때 ManuallyDrop을 사용합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
파일, 소켓, DB 커넥션 등의 래퍼 타입에 Drop을 구현하여 자동 해제합니다.
뮤텍스 가드와 같이 임계구역 종료 시 자동으로 잠금을 해제합니다.
ManuallyDrop로 FFI 포인터의 소멸 시점을 C 코드와 동기화합니다.
std::mem::drop으로 더 이상 필요 없는 자원을 스코프 종료 전에 미리 해제합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Drop은 Rust의 RAII 패턴을 구현하는 핵심 트레이트입니다.
스코프 종료 시 자동으로 자원을 정리하여 메모리 누수를 방지합니다.
forget과 ManuallyDrop으로 수동 제어가 필요한 예외 상황도 대응할 수 있습니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/std/ops/trait.Drop.html
RAII: https://doc.rust-lang.org/rust-by-example/scope/raii.html
#Rust #Drop #RAII #소멸자 #번역

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