[Rust] Cell๊ณผ RefCell
๋ฌ์คํธ๋ ์ ๋ฐ์ ์ผ๋ก ์ ์ฝ์ฌํญ์ด ์๋นํ ๋ง๊ณ ๋นก๋นกํ ํธ์ด๋ค. ์์์ฑ๋ ์๊ฒฉํ ์ง์ผ์ผํ๊ณ , ์์ ๊ถ๋ ๊น๊นํ๊ฒ ์ง์ ํด๋๊ณ ...
๊ทผ๋ฐ ์ด๋ฌ๋ฉด ์์ ํ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฅํ๊ฒ๋ ์ ๋ํ ์ ์์ง๋ง. ๊ทธ๋ผ์๋ ๋ถ๊ฐํผํ๊ฒ ๊ตฌ์กฐ์ ์์ ํ์ง ์์ ํ์์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๋ฌ์คํธ๋ ์ด๋ฌํ ๊ฒฝ์ฐ์ ์ธ ์ ์๋ ๋ํผ ํ์
๋ค์ std::cell ๋ชจ๋์์ ์ ๊ณตํ๋ค.
์์ผ๋ก ํ๋ ค๋ฉด unsafe๋ก ๋๋ฐฐํด์ผ ํ๋ ์ง์ ๋ถํ ์ฝ๋๋ฅผ ์ง์ ์์ฑํ์ง ์์๋ ๋๊ฒ๋ ํด์ฃผ๋ ๊ฒ์ด๋ค.
Cell
๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ๋ณ(&mut self) ๋ฉ์๋๋ค์ ๊ฐ๋ณ(let mut) ๋ณ์์์๋ง ๋์ํ๋๋ก ๋์ด์๋ค.
ํ์ง๋ง Cellํ์
์ ์ฌ์ฉํ๋ฉด, ๊ฐ๋ณ์ ์ธ ๋์์ ๋ถ๋ณ(let) ๋ณ์์์๋ ์ํํ ์ ์๋ค.

์ ๋๋ค.
RefCell
์ด๊ฑด Cell์ ๋์ ํ ๋น ๋ฒ์ ์ด๋ผ ํ ์ ์๋ค.
RefCell ๊ฐ์ฒด๋ borrow์ borrow_mut๋ผ๋ ๋ฉ์๋๋ก ์ฐธ์กฐ๋ฅผ ํ๋ํ ์ ์๋๋ฐ, ์ด ์ฐธ์กฐ๋ฅผ Ref์ RefMut๋ผ๋ ๋ํผํ์
์ผ๋ก ๊ด๋ฆฌํ๋ค.
์ด ๋ ํ์
์ ์ฌ์ฉ๋ฒ์ ๊ธฐ์กด์ &, &mut์ ๊ฑฐ์ ๋์ผํ๋ค ๋ด๋ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฑธ๋ก ๋ฐํ์์ ์์ ๊ถ์ ์ฒดํฌํ๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ๋ณ์๊ฐ ๊ฐ๋ณ์ด๋ ๋ถ๋ณ์ด๋ ๋ถ๋ณ borrow๋ฅผ ์ป์ด์ ๊ฐ์ ๋ณ๊ฒฝ์ ๊พํ ์ ์๋ค.

์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ RefCell์ ๊ณต์ ์ค๋งํธํฌ์ธํฐ์ธ Rc์ ์ฐฐ๋ก๊ถํฉ์ด๋ค. ๊ฐ๋ณ์์ ๊ถ์ ์ฌ๋ฌ๊ฐ ์ฌ์ฉํ ํ์๊ฐ ์์๋, Rc ์์ ๋ด์ฅํด์ ์ฌ์ฉํ๋ค.
Rc ํฌ์คํ
์ ์ฐธ๊ณ ํ ๊ฒ.