RefCell<T> borrow state

borrow()borrow_mut()는 런타임 카운터를 바꾼다

RefCell<T>는 컴파일러 대신 현재 활성화된 Ref<T>RefMut<T>를 세어 “여러 불변 또는 하나의 가변” 규칙을 실행 중에 지킨다.

허용되는 상태 전환

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 컴파일 에러 대신 테스트 실행 중 패닉으로 규칙 위반을 알린다.