개발 지식

개발 지식

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

페이지 정보

profile_image
영삼이
0건 117회 25-03-28 15:18

본문

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눈에 보이지 않는 시점에 실행되는 코드다.
로직, 로깅, 예외 발생 등은 절대 넣지 말고
오직 자원 정리에만 집중하라.

댓글목록

등록된 댓글이 없습니다.