๊ฐ๋น์ง ์ปฌ๋ ์
๊ฐ๋น์ง ์ปฌ๋ ์
์ ํ๋ก๊ทธ๋จ์์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์ ๋ฆฌํ๋ ๊ฒ์ด๋ค. ์ด ๊ธฐ๋ฅ์ ๊ฐ์ง ์ธ์ด(ํน์ ์์ง)์ Java, C#, JavaScript ๋ฑ์ด ์๋ค. C์ ๊ฐ์ ์ ์์ค ์ธ์ด์์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํด malloc()
๊ณผ free()
๋ฅผ ์ฌ์ฉํด ๊ฐ๋ฐ์๊ฐ ์ค์ค๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ํด์ ํด์ผ ํ์ง๋ง, JavaScript๋ ๊ณ ์์ค ์ธ์ด๋ก์ ๊ฐ์ฒด๊ฐ ์์ฑ๋์์ ๋ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ํ์ํ์ง ์๋ค๋ฉด ์๋์ผ๋ก ํด์ ํ๋ ๊ฐ๋น์ง ์ปฌ๋ ์
์ด ๋ด์ฅ๋์ด ์๋ค.
๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ํด์ ํด์ผ ํ๋ ๋ถ๋ถ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ๋์์ฃผ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ํด ๊ณ ๋ฏผํ ํ์๊ฐ ์๋ค๋ ์๋ชป๋ ์ธ์์ ๋ฐ์ ์ ์์ง๋ง, ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ์ด๋ป๊ฒ ๋์ํ๊ณ JavaScript๊ฐ ์ด๋ป๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋์ง ์์์ผ ๊ฐ๋ฐํ ์ฑ์ ์๋ ์ ํ, ์๊ธฐ์น ๋ชปํ ์ข ๋ฃ, ๋๋ฆฐ ์๋ต ์๋์ ๊ฐ์ ๋ฌธ์ ๋ค์ด ์ ์ผ์ด๋๋์ง ์ ์ ์๋ค.
๋ฉ๋ชจ๋ฆฌ ์์กด ์ฃผ๊ธฐ
๋ฉ๋ชจ๋ฆฌ ์์กด ์ฃผ๊ธฐ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ด๊ณ ์์ด ๋น์ทํ๋ค.
- ํ์ํ ๋ ๊ฐ๋ฐ์๊ฐ ํ ๋นํ๋ค.
- ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค. (Read and Write)
- ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋์ด์ ํ์ํ์ง ์์ผ๋ฉด ํด์ ํ๋ค.
2๋ฒ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ JavaScript๋ฅผ ์๋ก ๋ค๋ฉด ๊ฐ๋ฐ์๊ฐ ๋ณ์๋ฅผ ์ ์ธํด ๊ฐ์ ํ ๋นํ์ฌ ์ฌ์ฉํ๋ ๊ฒ ์ฒ๋ผ ๋ชจ๋ ์ธ์ด์์ ๋ช ์์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ถ๋ถ์ด๋ค. ํ์ง๋ง 1, 3๋ฒ ๊ณผ์ ์ ์ ์์ค ์ธ์ด์์๋ ๋ช ์์ ์ผ๋ก ์ฌ์ฉํ๋ฉฐ, ๊ณ ์์ค ์ธ์ด์์๋ ์๋ฌต์ ์ผ๋ก ์๋ํ๋ค.
๋ฉ๋ชจ๋ฆฌ ํ ๋น
let arr = [100, 200, 300, 400]
JavaScript๋ ํ๋ก๊ทธ๋๋จธ ๋์ ๊ฐ์ ์ ์ธํ ๋ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด์ค๋ค. ๋ณ์๋ฅผ ์ ์ธํ๊ณ ๋ฐฐ์ด์ ํ ๋นํ ๋ ๋ฐฐ์ด์ ๋ด์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ์ง ์์ ์ ์๋ ์ด์ ๊ฐ ๋ฐฐ์ด๊ณผ ๋ฐฐ์ด์ ๋ด๊ธด ๊ฐ๋ค์ ์ํ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ ํ ๋น์ ์์์ ์งํํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ๋ถ๋ถ์ ์ ์, ๋ฌธ์์ด, ํจ์, ๊ฐ์ฒด ๋ชจ๋ ์๋ฃํ์์ ์๋์ ์ผ๋ก ์ผ์ด๋๋ค.
ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ (๊ฐ ์ฌ์ฉ)
๊ธฐ๋ณธ์ ์ผ๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฝ๊ณ ์ฐ๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋ณ์๋ ๊ฐ์ฒด ์์ฑ์ ๊ฐ์ ์ฝ๊ณ ์ฐ๊ฑฐ๋, ํจ์ ํธ์ถ ์์ ํจ์์ ์ธ์๋ฅผ ์ ๋ฌํ์ฌ ์ํํ๋ ๋ฐฉ์์ผ๋ก ์ผ์ด๋๋ค.
๋ฉ๋ชจ๋ฆฌ ํด์
ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋์ด์ ํ์ ์๋ค๋ฉด ํด์ ๋ฅผ ํด์ผ ์ฑ์ ์ฑ๋ฅ์ ์ ํ์ํค์ง ์๋๋ฐ, ์ด ๋ถ๋ถ์์ ์ ์์ค ์ธ์ด๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ฒฐ์ ํ๊ณ ํด์ ํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ด์ฌํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์์ ์ ์ด ์ ๋๊ฐ ๊ต์ฅํ ๋์ ํธ์ด๋ค.
ํ์ง๋ง ๊ณ ์์ค ์ธ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด๋ผ๋ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ๋ด์ฅํ๊ณ ์์ด ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ถ์ ํ๊ณ , ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ด ๋์ด์ ํ์ํ์ง ์๊ฒ ๋์๋์ง ์ค์ค๋ก ํ๋จํ์ฌ ํ์ํ์ง ์๋ค๊ณ ํ๋จ๋๋ค๋ฉด ํด๋น ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ค. ํ์ง๋ง ์ธ์ด ์ค์ค๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฌ์ ํ ํ์ํ์ง ์ฌ๋ถ๋ฅผ ํ๋จํ๋ ๊ฒ์ ๋น๊ฒฐ์ ์ ์ธ ์์ญ์ด๊ธฐ ๋๋ฌธ์, ๊ณ ์์ค ์ธ์ด์ ๋ด์ฅ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ค์ ์ ํ์ ์ธ ํด๊ฒฐ์ฑ ์ ๊ตฌํํ๋ค.
๋ํ์ ์ธ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ฐฉ๋ฒ
๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ณ ๋ฆฌ์ฆ์ ์๋์ ๋๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ด ๊ฐ์ฅ ์ ๋ช ํ๋ค. ์ด ๋ ์๊ณ ๋ฆฌ์ฆ์ด ์์กดํ๊ณ ์๋ ๊ฐ๋ ์ ์ฐธ์กฐ(reference)์ด๋ค.
- ์ฐธ์กฐ(reference)
๋ช ์์ ์ด๋ , ์๋ฌต์ ์ด๋ ๊ด๊ณ ์์ด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ด์ ์์ ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ ๊ทผํ ์ ์๋ค๋ฉด ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค๊ณ ๋งํ๋ค. ์๋ฅผ ๋ค์ด, JavaScript ๊ฐ์ฒด๋ ์์ ์ ํ๋กํ ํ์ (prototype)์ ๋ํด ์๋ฌต์ ์ธ ์ฐธ์กฐ๋ฅผ ๊ฐ๊ณ ์๊ณ ์์ ์ ์์ฑ (property) ๊ฐ์ ๋ํ ๋ช ์์ ์ฐธ์กฐ๋ ๊ฐ์ง๊ณ ์๋ค. ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ์ ๋ํด, ๊ฐ์ฒด๋ ํ์์ ๊ฐ๋ ์ผ๋ก ์ผ๋ฐ์ ์ธ JavaScript ๊ฐ์ฒด๋ฅผ ์๋ฏธํ์ง๋ง ๊ด์์ ๊ฐ๋ ์ผ๋ก ํจ์ ์ค์ฝํ(function scope)๋ ๊ธ๋ก๋ฒ ๋ ์์ปฌ ์ค์ฝํ(global lexical scope)๊น์ง ํฌํจํ๋ค.
- ๋ ์์ปฌ ์ค์ฝํ(lexical scoping)
๋ณ์ ์ด๋ฆ์ด ์ค์ฒฉ๋ ํจ์์์ ํด์๋๋ ๋ฐฉ์์ ์ ์ํ๋ ๊ฒ์ผ๋ก, ์ค์ฒฉ๋ ๋ ์์ชฝ์ ํจ์๋ ๋ถ๋ชจ ํจ์๊ฐ ๊ฐ์ ๋ฐํํ ๋ค์์๋ ๋ถ๋ชจ ํจ์์ ์ค์ฝํ๋ฅผ ํฌํจํ๊ณ ์๋ค.
๋ ํผ๋ฐ์ค ์นด์ดํ (์ฐธ์กฐ ํ์ ๊ณ์ฐ)
ํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๋ณ์์ ์๋ฅผ ์ถ์ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฅ ๋จ์ํ ํํ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๋ณ์๋ ์ฒ์์๋ ํน์ ๋ฉ๋ชจ๋ฆฌ์ ๋ํด ๋ ํผ๋ฐ์ค๊ฐ ํ๋ ๋ฟ์ด์ง๋ง, ๋ณ์์ ๋ ํผ๋ฐ์ค๊ฐ ๋ณต์ฌ๋ ๋๋ง๋ค ๋ ํผ๋ฐ์ค ์นด์ดํธ๊ฐ ๋์ด๋๋ค. ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ ๋ณ์์ ๊ฐ์ด ๋ฐ๋๊ฑฐ๋ ๋ณ์ ์ค์ฝํ๋ฅผ ๋ฒ์ด๋๋ฉด ๋ ํผ๋ฐ์ค ์นด์ดํธ๋ ์ค์ด๋ ๋ค. ๋ ํผ๋ฐ์ค ์นด์ดํธ๊ฐ 0์ด ๋๋ฉด, ๊ทธ ๊ฐ์ฒด์ ๊ด๋ จํ ๋ฉ๋ชจ๋ฆฌ๋ ๋น์ธ ์ ์๋ค. ๋ ํผ๋ฐ์ค ์นด์ดํธ๊ฐ 0์ด ๋๋ค๋ ๋ง์ ์๋ฌด๋ ๊ทธ ๊ฐ์ฒด์ ๋ํ ๋ ํผ๋ฐ์ค๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ ๋ง๊ณผ ๊ฐ๋ค.
function reference() {
var obj1 = {};
var obj2 = {};
obj1.p = obj2;
obj2.p = obj1;
}
reference();
๋จ, ์ด ๋ฐฉ์์ ์ํ ์ฐธ์กฐ๋ก ์ธํ ๋ฌธ์ ๊ฐ ์๊ธธ ๊ฐ๋ฅ์ฑ์ด ๋๋ค. ์ ์ฝ๋์์ ๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ณ ์๋ก๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ ํํ์ด๊ธฐ ๋๋ฌธ์ ์ํ ์ฐธ์กฐ๊ฐ ๋ฐ์ํ๋ค. ์ด ๊ฐ์ฒด๋ค์ ํจ์ ํธ์ถ ๋ค์๋ ์ค์ฝํ๋ฅผ ๋ฒ์ด๋๊ฒ ๋์ด ์ค์ง์ ์ผ๋ก ์ธ๋ชจ๊ฐ ์๊ฒ ๋๊ธฐ ๋๋ฌธ์ ์ด๋ค์ด ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐํ๋์ด์ผ ํ์ง๋ง, ๋ ํผ๋ฐ์ค ์นด์ดํ ์๊ณ ๋ฆฌ์ฆ์์๋ ๋ ๊ฐ์ฒด๊ฐ ์ ์ด๋ ํ๋ฒ์ ์ฐธ์กฐํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๊ธฐ ๋๋ฌธ์ ๋ ๋ค ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ๋ ์ ์๊ฒ ๋๋ค.
ํธ๋ ์ด์ฑ
ํ ๊ฐ์ฒด์ flag๋ฅผ ๋๊ณ , ๊ฐ๋น์ง ์ปฌ๋ ์ ์ฌ์ดํด๋ง๋ค flag์ ํ์ ํ ์ญ์ ํ๋ mark and sweep ๋ฐฉ๋ฒ์ด๋ค. ๊ฐ์ฒด์ in-use flag๋ฅผ ๋๊ณ , ์ฌ์ดํด๋ง๋ค ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์๊ฐ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ถ์ ํด ์ฌ์ฉ์ค์ธ์ง ์๋์ง๋ฅผ ํ์(mark)ํ๋ค. ๊ทธ ํ ํ์๋์ง ์์ ๊ฐ์ฒด๋ฅผ ์ญ์ (sweep)ํ๋ ๋จ๊ณ๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ค. ํ์ฌ ๋๋ถ๋ถ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด mark and sweep ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์ฅ์ฐฉํ๊ณ ์๋ค.
mark and sweep ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ฒด๊ฐ ํ์ํ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด ํด๋น ๊ฐ์ฒด์ ๋ฟ์ ์ ์๋์ง(reachable)๋ฅผ ํ๋จํ๊ณ 3๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค.
- ๋ฃจํธ(Roots) : ์ผ๋ฐ์ ์ผ๋ก ๋ฃจํธ๋ ์ฝ๋์์ ์ฐธ์กฐ๋๋ ์ ์ญ ๋ณ์์ด๋ค. ์๋ฅผ ๋ค์ด ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฃจํธ๋ก ๋์ํ ์ ์๋ ์ ์ญ ๋ณ์๋ย
window
ย ๊ฐ์ฒด์ด๋ฉฐ, Node.js์์๋global
์ด๋ค. ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ๋ชจ๋ ๋ฃจํธ์ ์์ ํ ๋ชฉ๋ก์ ๋ง๋ค์ด๋ธ๋ค.
- ๋ชจ๋ ๋ฃจํธ์ ๊ทธ ์์๋ค์ ๊ฒ์ฌํด์ ํ์ฑํ ์ฌ๋ถ๋ฅผ ํ์ํ๋ค. ๋ฃจํธ๊ฐ ๋ฟ์ ์ ์๋ ๊ฒ๋ค์ ๊ฐ๋น์ง๋ก ํ์๋๋ค.
- ํ์ฑ์ผ๋ก ํ์๋์ง ์์ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ OS์ ๋ฐํํ๋ค.
์ด๋ฌํ ๋ฐฉ๋ฒ์ ์์ ๋ ํผ๋ฐ์ค ์นด์ดํ ๋ฐฉ๋ฒ๋ณด๋ค๋ ๋์๋ฐ, โ์ฐธ์กฐ๋ฐ์ง ์๋ ๊ฐ์ฒดโ๋ โ๋ฟ์ ์ ์๋ ๊ฐ์ฒดโ๋ผ๋ ์ ์ ๋ฅผ ๊ฐ์ง๊ณ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฉ๋ชจ๋ฆฌ ๋์
Garbage collected ์ธ์ด์์ ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ฃผ์ ์์ธ์ ์์์น ๋ชปํ ์ฐธ์กฐ์ด๋ค.
์์์น ๋ชปํ ์ฐธ์กฐ๋ ๊ฐ๋ฐ์๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ ๊ฒ์ด๋ผ ์๊ฐํ์ง๋ง ์ด๋ ํ ์ด์ ๋ก ํ์ฑํ ์ํ์ธ ๋ฃจํธ ํธ๋ฆฌ ์์ ์กด์ฌํ๋ ๋ฉ๋ชจ๋ฆฌ ์กฐ๊ฐ๋ค์ด๋ค. JavaScript์์๋ ๋์ด์ ์ฌ์ฉ๋์ง ์์ง๋ง ์ฝ๋ ์ ์ด๋๊ฐ์ ์ ์ง๋์ด ํด์ ๋์ง ๋ชปํ ๋ณ์๋ค์ด๋ค. ์ด๋ค ์ด๋ค์ ์ด๋ฅผ ๊ฐ๋ฐ์์ ์ค์๋ผ๊ณ ๋งํ๊ธฐ๋ ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฐ์ํ ์ ์๋ ์ผ๋ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋์ ํํ๋ค์ ์ผ๋ฐ์ ์ผ๋ก ์ธ ๊ฐ์ง์ ํํ๊ฐ ์๋ค.
- ์ฐ๋ฐ์ ์ผ๋ก ์์ฑ๋ ์ ์ญ๋ณ์
- DOM ์ธ๋ถ์์์ ์ฐธ์กฐ
- ํด๋ก์ ์ ์๋ชป๋ ์ฌ์ฉ
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์์คํ ์ด ํน์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ค์ ๋ก ์ฌ์ฉ์ค์ธ์ง ์๋์ง๋ฅผ ์๋ฒฝํ ๊ตฌ๋ถํด๋ด๋ ๊ฒ์ ์ฌ์ค์ ๋ถ๊ฐ๋ฅ์ ๊ฐ๊น๋ค. ์ค์ง ๊ทธ ์ฝ๋๋ฅผ ์์ฑํ ๊ฐ๋ฐ์๋ค๋ง์ด ํด๋น ๋ฉ๋ชจ๋ฆฌ ์กฐ๊ฐ์ ์ด์์ฒด์ ๋ก ๋ฐํ์ํฌ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ช ํํ ์ ์ ์๊ธฐ ๋๋ฌธ์ ํด๋น ๋ถ๋ถ๋ค์ ์ ํ์ธํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ง์ ์ค ์์์ผ ํ๋ค.
Uploaded by N2T