Rust Drop은 정리만 하고 로직은 넣지 마라
페이지 정보

영삼이
본문
✅ Drop
은 정리만 하고 로직은 넣지 마라
리소스 해제 외에는 side effect를 피해야 한다
Rust는 소멸자 역할을 하는 Drop
트레이트를 제공한다:
impl Drop for MyType {
fn drop(&mut self) {
println!("자원 해제");
}
}
-
변수의 수명이 끝나면 자동 호출
-
주로 파일, 네트워크, 메모리 해제 등에 사용
❌ 문제 상황
impl Drop for MyType {
fn drop(&mut self) {
send_log(); // 부작용 있는 함수
panic!("강제 종료"); // 프로그램 중단
}
}
-
Drop
은 명확한 실행 순서를 보장하지 않음 -
panic 중에 또 panic 발생 → double panic → abort
-
부작용(side effect)은 예측 불가 동작 초래
✅ Drop
은 오직 정리(cleanup)에만 써라
-
파일 닫기
-
임시 디렉토리 제거
-
소켓 연결 종료
-
메모리 정리
안전한 예시
impl Drop for TempFile {
fn drop(&mut self) {
let _ = std::fs::remove_file(&self.path);
}
}
✔️ Drop
은 눈에 보이지 않는 시점에 실행되는 코드다.
로직, 로깅, 예외 발생 등은 절대 넣지 말고
오직 자원 정리에만 집중하라.
- 이전글PartialEq만 파생하면 해시 키로 못 쓴다 25.03.28
- 다음글Debug 대신 Display를 구현하면 출력이 유연해진다 25.03.28
댓글목록
등록된 댓글이 없습니다.