๋ณธ์ธ๋ ์ ๋ชฐ?๋ฃจ ์ง๋ง ๋ด๋ฑ์ ๋ง์ด ์์ผ๋ ์๋๋งํผ ์ ์ด๋ด
Rust๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ด ๋
ํนํ ์ธ์ด์ค์ ํ๋๋ค.
๋ณดํต ์ผ๋ฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๊ด๋ฆฌ๋ฅผ ์๊ธฐํ๋ฉด
C/C++๊ฐ์ '๊ฐ๋ฐ์๊ฐ ์ง์ ๊ด๋ฆฌ' ๋ฐฉ์์ด๋ Java C#๊ฐ์ '๊ฐ๋น์ง ์ฝ๋ ํฐ๊ฐ ๊ด๋ฆฌ' ๋ฐฉ์ ๋๊ฐ์ง๋ฅผ ๋ ์ฌ๋ฆดํ ๋ฐ,
Rust์ ๊ฒฝ์ฐ๋ ๊ฐ๋ฐ์์ ์ง์ ๊ด๋ฆฌ ์ค์๋ก ์ธํ ์ค๋ฅ๋ ๋ฐฉ์งํ๋ฉด์ GC์ฑ๋ฅ์ด์๋ ์๋ ๊ฐ์ฉ๋ ๋ฐฉ๋ฒ์ ํํจ
์ธ์ด์์ฒด์ ์ ์ฝ์ ๊ฑธ์ด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ปดํ์ผํ์์ ์น ๋ค ์ถ์ ํด๋ฒ๋ฆฌ๋ ๋ฐฉ๋ฒ์.
๋ฐ๋ผ์ ๊ฐ๋ฐ ํ ๋ ์ข ์๊ฒฉํ ๊ท์น์ ๋ฐ๋ผ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์จ์ผ๋จ
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ๋ฌด์์ด๋?
-์์ฐ๋ ๋ฉ๋ชจ๋ฆฌ ํด์
-ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ ๋ฐฉ์ง (๋๊ธ๋งํฌ์ธํฐ)
๋ญ ์ด๋ฐ๊ฒ๋ค์ธ๋ฐ,
"์์ฐ๋๋ฉ๋ชจ๋ฆฌ" ๋ฅผ ์ด๋ป๊ฒ ์์๋ด๋๋๊ฐ ๊ด๊ฑด์ด๋ค.
C/C++ ๋ฐฉ์์์๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ํ๋จํด์ ์ง์ '์ด๊ฑด ์ด์ ์์ฐ๋๊น delete()' ๋ฅผ ํ๋๊ฑฐ๊ณ
GC๋ฐฉ์์์๋ ๊ทธ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฐธ์กฐํ๊ณ ์๋๊ฒ ํ๋๋ ์์ผ๋ฉด ๊ทธ ๋ ์์ด๋ค ๋ผ๊ณ ํ๋จ์ ํ๋ค.
rust๋ GC๋ ๋น์ทํ๊ฒ ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ๊ฐ 0๊ฐ๋ฉด ์์ด๋ค๋ผ๊ณ ํ๋จ์ ํ๋ค. ๊ทผ๋ฐ ์ด๊ฑธ ์ปดํ์ผ ํ์์ ํจ.
์ด์ผํ๋??
rust์ ์๋ ํน์ํ ๊ฐ๋ ๋๋ฌธ์ด๋ค. rust์๋ '๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์ธ'๊ฐ๋ ์ด ์๋ค. ์ด๊ฑธ ownership์ด๋ผ๊ณ ํ๋๋ฐ,
์ด๋ค ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ธ๋ฉ ๋ ๋ณ์๋ ๋ฑ ํ๊ฐ๋ง ์กด์ฌํ๋ค๋๊ฑฐ๋ค.
GC๋ฅผ ์ฐ๋ ์ธ์ด์์๋ ํด๋น ๋ฉ๋ชจ๋ฆฌ์์ญ์ ๋๊ตฌ๋ ์ฐธ์กฐํ ์ ์๊ณ , ๊ทธ ์์ ๋ก์ด ์ฐธ์กฐ๊ฐ 0๊ฐ๊ฐ ๋ ๋๊ฐ ์ธ์ ์ธ์ง๋ฅผ ์์๋ด๊ธฐ ์ํด ๊ฐ๋น์ง์ฝ๋ ํฐ๊ฐ ๊ทธ๋ํ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๊ณ ๋ฅ๊ผฌ์ผ๋ฅผ ๋ค ํ์ง๋ง?
rust์์๋ ๋ฉ๋ชจ๋ฆฌ์์ญ์ ์ฐธ์กฐํ๋ ๋ณ์๊ฐ '์ฃผ์ธ' ํ๋ช ์ด๋๊น ๊ทธ๋ฅ ์ฃผ์ธ์ด ์ฐธ์กฐ๋ฅผ ๋๋ด๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ ๋์ธ๊ฑฐ๋ค.
๊ทธ๋์ rust์์๋ ๋์ /๋ณต์ฌ์ฐ์ฐ์ด ์ฌ์ค์ ์ด๋์ฐ์ฐ์ฒ๋ผ ๋์ํจ.
a = b ๋ผ๋ ๋์ ์ฐ์ฐ์ด ์๊ณ ๋ ํ์, b๊ฐ ์ฐธ์กฐํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ a๊บผ๊ฐ ๋์ด๋ฒ๋ฆฌ๊ณ b๋ ๊ทธ๋ฅ ํ๊ธฐ๋์ด๋ฒ๋ฆฐ๋ค.
์ด๋ ๊ฒ ์ฆ์ ์์ ๊ถ์ด ์ด๋๋๊ณ , ๋จ์ ๋ณ์๋ ํ๊ธฐ๋์ด๋ฒ๋ฆฌ๋ ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ๋ ๋ฌธ์ ๊ฐ ์์ ๋ฐ์ํ์ง ์๋๋ค.
a = b ๊ฐ ์ํ๋ ๋ค์ b๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๋ค๋ ์ฌ์ค์ ์ปดํ์ผ๋ฌ๋ ๋ฐ๋ก ์ ์ ์๋ฐ.
๋ฐ๋ผ์ ์ปดํ์ผํ์์ ๋๊ธ๋งํฌ์ธํฐ ์ถ์ ์ด ์๊ฐ๋ฅ ํ ๊ฒ.
๋์ ์ ์ฝ๋ ์งค ๋ ํ๋ค์ง๋? ๋ฌ์คํธ๋ก ์ฝ๋ฉ์ํด๋ด์ ๋ชฐ๋ฃจ
(์ด ownership๊ฐ๋ ๋๋ฌธ์ ์ฝ๋ฉํ๊ธฐ๊ฐ ๋๋ฌด ํ๋ค์ด์ borrowed pointer๋ผ๋ ๊ฐ๋ ์ ์ฌ์ฉํ๊ธดํ๋ค. ๊ทผ๋ฐ ๋ด๊ฐ ์๋ชฐ๋ฆใ )
---
GC๋ฐฉ์์ ๋ฌธ์ ์ค ํ๋๋, '์ค์ง์ ์ผ๋ก ์ฐ์ด์ง ์์ง๋ง? ์ฐธ์กฐ๋ ๋จ์์์ด์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ์๋จ' ์ ๊ฒฝ์ฐ๋ค.
rust์์๋ ์ด๊ฑธ ๋ฐฉ์งํ๊ธฐ์ํด, ๋ฉ๋ชจ๋ฆฌ์ ์๋ช (LifeTime) ๊ฐ๋ ์ ๋์ ํ๋ค.
์ค์ฝํ {}๊ฐ ๋๋๋ฉด ๊ทธ๋ฅ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฃฝ์ฌ๋ฒ๋ฆฌ๋๊ฒ์ด๋ค.
์คํ์์ญ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ผ๋ฉด ๋ค๋ฅธ์ธ์ด๋ ๋น์ฐํ ๊ทธ๋ ๊ฒ ์ง๋ง?
rust๋ ํ์์ญ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ ์ค์ฝํ๊ฐ ๋๋๋ฉด ๊ทธ๋ฅ ์ฃฝ์ฌ๋ฒ๋ฆฐ๋ค.
๋ค์ง์ง ์๊ธฐ์ํด์๋?
2๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
- return์ผ๋ก ๋๊ฒจ์ฃผ๋๊ฒ (์ด๊ฒ๋ ์ฌ์ค์ ํจ์ ๋ฆฌํด๊ฐ์ ๋ฐ๋ ๋ณ์๋ก ownership์ ์ด์ ํ๋ ํ์์ด๋ค)
- ์ค์ฝํ ๋ฐ๊นฅ์ ๊ฐ์ฒด๊ฐ ์์ ๊ถ์ ๊ฐ์ ธ๊ฐ๋๊ฒ.
๋๋ฒ์งธ๊ฑฐ๊ฐ ์ฝ๊ฐ ์ดํด๊ฐ ์๊ฐ ์ ์๋๋ฐ ๋์ถฉ ๋ค์๊ณผ ๊ฐ๋ค.
{
//๊ฐ์ฒด A ์์ฑ
{
//๊ฐ์ฒด B ์์ฑ
} // <- ์๋ B๊ฐ ๋ค์ง๋์์
}
์๋ ์ด๋ฐ์ํฉ์ธ๋ฐ
{
//๊ฐ์ฒด A ์์ฑ
{
//๊ฐ์ฒด B ์์ฑ
//๊ฐ์ฒด A์ ๋ฉค๋ฒ๋ณ์๋ก ๊ฐ์ฒดB์ ์์ ๊ถ์ ์ด์
}
//๊ฐ์ฒด B (์ฟ๋๊ฒ)์ A์ ์์ ์ด์์๋ฐ.
}
์ด๋ ๊ฒ rust์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ์์๋ณด์๋ค.
๋ฃจ์๊ฐ ๋ญํ๋๊ฑด์ง ์ด๋์ ์ฐ๋๊ฑด์ง ์๋ ค์ค
์๋ ๊ฒ๊ฐ๋ฐ๊ฐค์์ ๊ฒ๊ด๋ จ๋๊ฑฐ ๋ฌผ์ด๋ณผ ์ค์์๋๋, ํ๊ฐค๋ก ๊บผ์ ธ๋ผ๊ณ ํ๊ณ ์ถ์ง๋ง? ๋ฃจ์๋ ๊ฒ์๋ด UI์คํฌ๋ฆฝํ ๊ฐ์๊ฑธ๋ก ๋ง์ด ์. ํ์ด๋น์ค์์ UI์คํฌ๋ฆฝํธ ๋ฃจ์๋ก ์ง ๋ค. ์๊ฐ๋๋ฉด ์ค๋ช ํด์ค
์ค ์๋ฐ ์ดํด๊ฐ ํ ๋๋
๊ฐ์ถ
๋ ์ค๋ช ์ข ์น๋ค?
GC ๋ณด๋ค ์ด๊ฒ ๋ ์ข์ ๋ณด์ด๋ค