๋ด๊ฐ ์๋ ๋ฐ ๋๋ก ์ ์ด ๋ณผํ ๋ ์๋ชป๋ ๋ถ๋ถ ์์ผ๋ฉด ์ง์ ํด์ค.
1. new SomeClass() ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์ผ์ด๋๊ณ , ํ๋กํ์ผ๋ฌ์ GC alloc์ด ์ฐํ๋ค.
2. ๊ทธ๋ฌ๋ ํด๋น ๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ ์ด์์๋ ํ 1์์ ๋ง๋ ๊ฐ์ฒด๋ '๊ฐ๋น์ง๊ฐ ์๋๋ค'
3. ๋ชจ๋ ์ฐธ์กฐ๋ฅผ ์์ (๋๋ GameobJect.Detory() ๋ฑ) ๊ฐ์ฒด๋ '๊ฐ๋น์ง๊ฐ ๋์๋ค' ๊ณ ๋งํ ์ ์๋ค. ๊ทธ๋ฌ๋ ์ด ์์ ์์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋์๊ฐ๋ ๊ฒ์ ์๋๋ค.
4. ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์์์ ์์ ์ ๋์๊ฐ๋๋ฐ (OS๋ ์ ๋ํฐ ์์ง์ด ๊ด๋ฆฌ) ์ด ์์ ์ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๊ฒ์ฌํ์ฌ ์ฐธ์กฐ๋ฅผ ์ ๋ถ ์์ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ '๊ฐ๋น์ง' ๋ก ์ ์ธํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ญ์ ํ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ก๊ฒจ ๋ง์ถ๋ค.
5. ๋ฐ๋ผ์ '๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํ์'๋ '๊ฐ๋น์ง๋ฅผ ๋ง๋๋ ๊ฒ' ์ด ์๋๋ค. ๊ทธ ๊ฐ์ฒด๊ฐ ์ฌํ์ฉ๋ ์ง ์๋์ง ๋ง๋๋ ์์ ์์๋ ์ ์ ์์ผ๋ฏ๋ก.
6. ๋ค์ ์ฝ๋๋ ์ฌํ์ฉ์ ๊ณ ๋ คํ์ง ์์ผ๋ฏ๋ก '๊ฐ๋น์ง๋ฅผ ๋ง๋ค๊ณ ์๋ค' ๊ณ ๋งํ ์ ์๋ค.
...
yield return new WaitForSeconds(1f);
7. ๋ค์ ์ฝ๋๋ ๊ฐ๋น์ง๋ฅผ ๋ง๋ค๊ณ ์์ง ์๋ค. ์ฌํ์ฉ ํ๋๊น.
_wait = new WaitForSeconds(1f);
...
yield return _wait;
8. ์ผ๋ฐ์ ์ธ ์ค๋ธ์ ํธ ํ์ ๊ฐ์ฒด๋ฅผ ์๋ฉ ๋ง๋ค์ด๋๊ณ ํ์ ๋ฃ์ด๋๊ณ ์ฌํ์ฉํ๊ธฐ ๋๋ฌธ์, '๊ฐ๋น์ง๋ฅผ ๋ง๋ค์ง ์๋๋ค.'
9. ํ๋กํ์ผ๋ฌ๋ฅผ ๋๋ ค๋ณด๋ฉด ์ค๋ธ์ ํธ ํ๊ณผ ํ์ ๋ค์ด๊ฐ ๊ฐ์ฒด๋ค์ ๋ง๋ค๋ ๋๋์ GC alloc ์ด ์ฐํ์ง๋ง ์ด๊ฒ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์์ ์ด๊ณ ๊ฐ๋น์ง๋ฅผ ๋ง๋ ๊ฒ์ ์๋๋ค.
'๊ฐ๋น์ง๋ฅผ ๋ง๋ ๋ค' ๋ผ๋๊ฒ ๊ฒฐ๊ณผ๋ก ์ ์ธ ํํ์ด๋ผ ์์ ์ ๋ฐ๋ผ ๋ค์ํ ์คํด๋ฅผ ๋ถ๋ฌ์ผ์ผํค๋ ๊ฒ ๊ฐ๋ค.
ํน์ ๋ด๊ฐ ์๋ชป ์๊ณ ์์ผ๋ฉด ์ง์ ํด์ฃผ๋ฉด ๊ณ ๋ง๊ฒ ์ด.
๋ ์ฌ๋ฏธ์๋ ๊ธ์ด๋ผ ์๊ฐ๋๋ฉด ์ญ์ ํ๊ฒ ์.
-------------------------------------------------------------------
์ถ๊ฐ์คํ
๋งคํ๋ ์๋ง๋ค ์ผ์ ๋์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ ๊ฐ์ฒด (๊ฐ๋จํ int ๋ฐฐ์ด)์ ๋ง๋ค์ด์ ๋ฆฌ์คํธ์ ๊ณ์ ๋ฃ๋๋ค.
๋ฆฌ์คํธ์ ์กด์ฌํ๋ ํ ์ด ๊ฐ์ฒด๋ค์ '๊ฐ๋น์ง๊ฐ ์๋'ย
๊ทธ๋ผ์๋ ํ๋กํ์ผ๋ฌ์๋ GC alloc ์ผ๋ก ์ฐํ๋ ๊ฒ์ ๋ณผ ์ ์์. (๋งค ํ๋ ์๋ง๋ค 4kb์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถ๊ฐ๋๋ค)
์ด๋ก์ ํ๋กํ์ผ๋ฌ์ ์ฐํ๋ GC alloc์ '๊ฐ๋น์ง๊ฐ ๋์ด๋ฌ๋ค' ๊ฐ ์๋๋ผ '์ ์ฌ์ ์ธ ๊ฐ๋น์ง (์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ํ ๋น)์ด ๋์ด๋ฌ๋ค' ๋ผ๊ณ ํด์ํ ์ ์์.
๊ทธ๋ฐ ์๋ฏธ์์ Rust๋ฅผ ํฉ์๋ค!
GC alloc์ด ์๋๋ผ Memory alloc์๋๋?
GC allocated๋ค ์ ๊ฑด ๋ฉ๋ชจ๋ฆฌํ ๋น์ด ์๋๋ผ ๊ฐ๋น์ง ์ฌ๋ผ๊ฐ๊ฑฐ๋ค
๊ทธ๋ฆฌ๊ณ ๊ฐ๋น์ง==GC๋จน์ด ๊ฐ๋น์ง!=GC๋จน์ด๊ฐ ๋ ์ง๋ ๋ชจ๋ฅด๋ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ
๊ทธ๋ผ ํ๋กํ์ผ๋ฌ์ ๊ฐ์ฒด ์์ฑํ ๋ ๋ง๋ค GC alloc ์ฌ๋ผ๊ฐ๋๋ฐ ์ด๊ฒ ์ ๋ถ ๊ฐ๋น์ง๋ ๋ง์ด์ผ?
์ด ๊ทธ๊ฑฐ ์ ๋ถ ๊ฐ๋น์ง๋ผ๊ณ
์ ์ด ใ ใ ๋ธ ์ ์ด ๊ฐ๋น์ง์ฌ๋ถ๋ ํ์ด๋ ์คํ์ด๋ ์ฐจ์ด๋ค
๊ธ์ ์ถ๊ฐํ ์คํ ๋ณด๋ฉด int๋ฐฐ์ด ์ถ๊ฐํ ๋ ๋ง๋ค GC alloc์ด ๋์ด๋ฌ๋๋ฐ ์ด๊ฒ '๊ฐ๋น์ง๊ฐ ๋์ด๋ฌ๋ค' ๋ผ๊ณ ์๊ฐํด?
GC alloc์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๊ฑธ ๋ปํ๋๊ฒ ์๋๊ณ GC์ ํ ๋น๋๊ฑธ ๋งํ๋๊ฑฐ๋ผ๊ณ ์ฆ ๊ฐ๋น์ง๋ผ๊ณ
ใ ใ ์๊ฒ ์. ์ค์ท์ ๋ณด๊ณ ๋ ๊ทธ๋ ๊ฒ ๋งํ๋ ๋ด๊ฐ ๋ ํ ๋ง์ด ์๋ค. ๋ ๋ง๋๋ก๋ผ๋ฉด ์ค์ท์ ์ฝ๋๋ ๋งคํ๋ ์๋ง๋ค 4kb ๊ฐ๋น์ง๋ฅผ ๋ง๋๋ ์ฝ๋์ธ๊ฑฐ๊ตฌ๋ง.
์๋ ์จ์ด๋ฐ ๊ธ์ ๊ทธ๋๋ก ์ฒ ์ฝ์ด๋ด GC allocated ๊ฐ๋น์ง์ปฌ๋ ํฐ์ ํ ๋นํ๋จ๊ฑด๋ฐ GC๊ฐ ๋ฉ๋ชจ๋ฆฌ๋?