Rust

`RefCell<T>`와 내부 가변성 패턴

내부 가변성(interior mutability)은 어떤 데이터에 대한 불변 참조자가 있을 때라도 데이터를 변경할 수 있게 해주는 러스트의 디자인 패턴입니다; 보통 이러한 동작은 대여 규칙에 의해 허용되지 않습니다. 데이터를 변경하기 위해서, 이 패턴은 데이터 구조 내에서 unsafe(안전하지 않은) 코드를 사용하고, 바깥쪽 API에서는 런타임 대여 검사를 통해 규칙을 지키게 합니다.

RefCell과 내부 가변성: 컴파일 시점 대여 검사와 런타임 대여 검사의 차이를 확인합니다.

핵심 개념

RefCell

RefCell은 컴파일 시점 대신 런타임에 대여 규칙을 검사해, 불변 참조 뒤에 숨은 내부 상태를 제한적으로 바꿀 수 있게 합니다.

1

RefCell

여기에 포함된 unsafe 코드는 안전한 API로 감싸져 있고, 바깥쪽 타입은 여전히 불변입니다. RefCell은 대여 규칙을 런타임에 확인해 테스트 더블이나 캐시처럼 내부 상태가 필요한 경우에 쓰입니다.

2

내부 가변성: 불변값에 대한 가변 대여

내부 가변성(interior mutability)은 어떤 데이터에 대한 불변 참조자가 있을 때라도 데이터를 변경할 수 있게 해주는 러스트의 디자인 패턴입니다. 단, 규칙 위반은 컴파일 오류가 아니라 런타임 패닉으로 드러납니다.

3

내부 가변성에 대한 용례: 목 객체

안전하지 않은 코드는 이 규칙들을 지키고 있는지에대한 검사를 컴파일러에게 맡기는 대신 수동으로 하는 중임을 컴파일러에게 알립니다. unsafe 코드의 책임과 경계는 19장에서 더 자세히 다룹니다.