개발 지식

개발 지식

Rust Rc와 RefCell은 마지막 수단이다 — 안 써도 되는 구조부터 고민하라

페이지 정보

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

본문

RcRefCell은 마지막 수단이다 — 안 써도 되는 구조부터 고민하라

공유와 가변성을 동시에 허용하면 위험하다


Rust는 기본적으로 소유권과 불변성을 강제한다.
그런데 이를 우회하는 방법으로 RcRefCell이 있다:

use std::rc::Rc;
use std::cell::RefCell;

let data = Rc::new(RefCell::new(vec![1, 2, 3]));
data.borrow_mut().push(4);

❌ 문제점

  • Rc참조 카운팅

  • RefCell런타임에만 가변성 검사

즉, 컴파일 타임엔 안전하지만
런타임에 패닉이 날 수 있다:

let _a = data.borrow();
let _b = data.borrow_mut(); // ❌ 런타임 에러 발생

✅ 먼저 가능한 구조로 설계하라

  • 가변성이 필요 없는 경우Rc 없이 & 또는 Box

  • 가변성은 있지만 공유할 필요 없음&mut

  • 둘 다 필요할 때만Rc<RefCell<T>> 고려


대안 구조 예시

struct State {
    count: usize,
}

impl State {
    fn increment(&mut self) {
        self.count += 1;
    }
}
  • 외부에서 &mut으로 접근 가능하면 RefCell 불필요


✔️ Rc<RefCell<T>>는 편하지만,
가장 마지막에 고민해야 할 선택지다.
Rust의 안전성과 설계 철학을 유지하려면,
최대한 컴파일 타임에 구조를 고정하라.

댓글목록

등록된 댓글이 없습니다.