count = 1…n
borrow()와 borrow_mut()는 런타임 카운터를
바꾼다
RefCell<T>는 컴파일러 대신 현재 활성화된
Ref<T>와 RefMut<T>를 세어
“여러 불변 또는 하나의 가변” 규칙을 실행 중에 지킨다.
count = 0count = −1허용되는 상태 전환
safe API
borrow()
Ref<T> 카운터 증가
불변 대여는 여러 개가 동시에 활성화될 수 있다.
drop Ref
스코프 종료 시 카운터 감소
Ref<T>가 사라지면 읽기 대여 수가
줄어든다.
borrow_mut()
RefMut<T>는 단독일 때만 생성
활성 Ref<T>나 다른
RefMut<T>가 없어야 한다.
위반되는 상태 전환
panic
one
let mut one_borrow = borrow_mut()
가변 대여가 열리면 내부 값의 유일한 접근자가 된다.
two
let mut two_borrow = borrow_mut()
첫 번째 RefMut<T>가 살아 있어 두 번째 가변
대여는 거부된다.
error
already borrowed: BorrowMutError
컴파일 에러 대신 테스트 실행 중 패닉으로 규칙 위반을
알린다.