Rust · interior mutability

소유자 수와 변경 시점으로 스마트 포인터를 고른다

RefCell<T>는 컴파일 타임 대신 런타임에 대여 규칙을 확인해, 불변 API 안에서도 내부 값을 바꿀 수 있게 합니다.

single owner

Box<T>

compile-time borrow

단일 소유자가 값을 힙에 두고, 대여 규칙은 컴파일 타임에 검사됩니다.

many owners

Rc<T>

shared immutable

여러 소유자가 같은 값을 읽지만, 기본적으로 가변 접근은 제공하지 않습니다.

runtime check

RefCell<T>

borrow / borrow_mut

단일 소유 내부에서 런타임 대여 상태를 추적해 불변 겉모습과 내부 변경을 함께 둡니다.

idle

대여 없음

borrowborrow_mut 둘 다 시작할 수 있습니다.

read

불변 대여 여러 개

여러 Ref<T>가 동시에 존재할 수 있습니다.

write

가변 대여 하나

하나의 RefMut<T>가 있는 동안 다른 대여는 막힙니다.

panic

규칙 위반

두 번째 가변 대여처럼 충돌이 나면 런타임에 패닉이 납니다.

Rc<RefCell<T>>

여러 소유자가 같은 값을 공유하고, 필요할 때 내부 값을 바꿉니다.

목 객체

&self 메서드 안에서 호출 기록 같은 내부 상태를 저장합니다.

트레이드오프

검사가 늦어지고 약간의 런타임 비용이 있지만 더 유연한 구조를 허용합니다.