๐์ค๋ ๋ฐฐ์ด ๊ฒ
ํธ์ด์คํ
- ํธ์ด์คํ ์ด๋?
: ์ฝ๋๊ฐ ์คํ๋๊ธฐ ์ ์ ๋ณ์, ํจ์ ์ ์ธ์ด ํด๋น ์ค์ฝํ์ ์ต์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ง ๊ฒ ๊ฐ์ ํ์
> ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฝ๋ ์คํ ์ ์ ์คํ ์ปจํ ์คํธ๋ฅผ ์ํด ์คํ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ํ์ํํ๊ณ ๊ตฌ๋ถํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ๊ณผ์ ์์ ๋ชจ๋ ์ ์ธ์ด ์ค์ฝํ์ ๋ฑ๋ก๋๋ค.
>๋ณ์๋ ์ ์ธ - ์ด๊ธฐํ - ํ ๋น ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋๋ฐ, var ๋ณ์์ ๊ฒฝ์ฐ ์ ์ธ๊ณผ ํจ๊ป undefined๋ก ์ด๊ธฐํ๋์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ์ฐธ์กฐ์๋ฌ๊ฐ ๋์ง ์์ง๋ง let, const ๋ณ์๋ ์ ์ธ๊ณผ ์ด๊ธฐํ๊ฐ ๋ณ๊ฐ๋ก ์ด๋ฃจ์ด์ ธ ์ ์ธ๋ง ๋๊ณ ์ด๊ธฐํ๋ ๋์ง ์์ ์ํ์์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์ง ์๋๋ค. ๋ฐ๋ผ์ ์ด๊ธฐํ๋์ด ์์ง ์์ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
- ๋ณ์ ๋จ๊ณ
-์ ์ธ ๋จ๊ณ : ๋ณ์๋ฅผ ์คํํ์ฌ ์ปจํ ์คํธ ๋ณ์ ๊ฐ์ฒด์ ๋ฑ๋กํ๋ค.
-์ด๊ธฐํ ๋จ๊ณ : ๋ณ์ ๊ฐ์ฒด์ ๋ฑ๋ก๋ ๋ณ์๋ฅผ ์ํ ๊ณต๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ํ๋ณดํ์ฌ ๋ณ์๊ฐ undefined๋ก ์ด๊ธฐํ๋๋ค.
-ํ ๋น ๋จ๊ณ : undefined๋ก ์ด๊ธฐํ๋ ๋ณ์์ ์ค์ ๊ฐ์ ํ ๋นํ๋ค.
var ๋ณ์๋ ์ ์ธ๊ณผ ์ด๊ธฐํ์ ํจ๊ป ์ด๋ฃจ์ด์ ธ ๋ณ์ ์ ์ธ๋ฌธ ์ด์ ์๋ ์ ๊ทผํ๋ฉด ์๋ฌ๊ฐ ๋์ง ์๊ณ undefined๋ฅผ ๋ฐํํ๋ค. ํ์ง๋ง let์ ๊ฒฝ์ฐ ์ ์ธ๊ณผ ์ด๊ธฐํ๊ฐ ๋ถ๋ฆฌ๋์ด ๋ณ์ ์ ์ธ๋ฌธ์ ๋๋ฌํ์ ๋ ์ด๊ธฐํ์ ํ ๋น์ด ํจ๊ป ์ผ์ด๋๋ค. ๊ทธ๋์ ์ค์ฝํ ์์ ์ง์ ๋ถํฐ ์ด๊ธฐํ ์์ ์ง์ (๋ณ์ ์ ์ธ๋ฌธ)๊น์ง ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๊ณ ์ด ๊ตฌ๊ฐ์ ์ผ์์ ์ฌ๊ฐ์ง๋ Temporal Dead Zone(TDZ)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ
:๋ฉ๋ชจ๋ฆฌ๋ ํ ๋น - ์ฌ์ฉ - ํด์ ์ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค
-ํ ๋น: ๋ณ์๋ฅผ ์ค์ ํ๋ฉด ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๋ค
-์ฌ์ฉ: ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ๋ฃ์ด ์ฌ์ฉํ๋ค.
-ํด์ : ์ฌ์ฉ์ ๋ง์น๋ฉด ๋ณ์๋ฅผ ํด์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ฑฐํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๋ก๋ ์ด๋ป๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๋ฆฌํ ์ ์์๊น?
: ์๋ฐ์คํฌ๋ฆฝํธ์์๋ Garbage Collector๋ฅผ ์ด์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๋ฆฌํ๋ค.
>Garbage Collector๋ Garbage Collection ์ด๋ผ๋ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์๊ณ ๋ฆฌ์ฆ์ ํ ๋๋ก ๋ง๋ค์ด์ง ๊ฐ์ฒด๋ก ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ์ญํ ์ ํ๋ค.
#๋ณ์๋ฅผ ์ค์ ํ ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๋ ๊ณผ์
let name = 'zero';
์ด๋ฌํ ๋ณ์๋ฅผ ์ค์ ํ๋ฉด ๋ณ์ name์ ๊ณ ์ ์๋ณ์๋ฅผ ์์ฑํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํ ๋นํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ 'zero'๋ผ๋ ๊ฐ์ ๋ฃ๋๋ค.
์ฆ, ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๋ณ์๋ ๊ฐ ๊ทธ ์์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒ์ด ์๋๋ผ ๊ฐ์ด ์ ์ฅ๋์ด ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒ!
๋ง์ฝ ๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
let name = 'zero';
name = 'yj';
์ฒ์์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ 'zero'๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ด ์๋๋ค.
'yj'๊ฐ ์ ์ฅ๋ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ์๊ธฐ๊ณ name์ ์ด์ 'zero'์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ์๋๋ผ 'yj'์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ ๊ฒ์ด ์๋๋ผ ์๋ก์ด ์ฃผ์์ ๊ฐ์ด ์์ฑ๋๋ ์ด์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์์ ํ์ ์ ๊ฐ์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ผ ์ด์ 'zero'์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ ๋ ์ด์ ์ฐธ์กฐ๋์ง ์๋๋ค. ๋ฐ๋ผ์ Garbage Collector์ ์ํด ์ ๋ฆฌ๋๋ค. ์ด๋ ๊ฒ ์ ๋ฆฌ๋ ๋ ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์ด 'Mark and Sweep Algorithm'์ธ๋ฐ ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ ์ด์ ํด๋น ์ฃผ์์ ๋ฟ์ ์ ์์ ๋ ๊ทธ ์ฃผ์๋ฅผ ์ ๊ฑฐํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ์๊ณ ๋ฆฌ์ฆ์ ์ํด 'zero'๊ฐ ๋ด๊ฒจ ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ๊ฑฐ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
ํ๋ก๊ทธ๋จ์ด ์ด์์ฒด์ ๋ก๋ถํฐ ํ ๋น๋ฐ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ 4๊ฐ์ง๊ฐ ์๋ค.
1. ์ฝ๋ ์์ญ
2, ๋ฐ์ดํฐ ์์ญ
3. ์คํ ์์ญ
4. ํ ์์ญ
-์ฝ๋ ์์ญ : ์คํ๋๋ ํ๋ก๊ทธ๋จ์ ์ฝ๋๊ฐ ์ ์ฅ๋๋ ์์ญ
-๋ฐ์ดํฐ ์์ญ: ์ ์ญ ๋ณ์์ ์ ์ ๋ณ์๊ฐ ์ ์ฅ๋๋ ์์ญ
-์คํ ์์ญ: ํจ์ ํธ์ถ๊ณผ ๊ด๋ จ๋ ์ง์ญ๋ณ์์ ๋งค๊ฐ๋ณ์๊ฐ ์ ์ฅ๋๋ ์์ญ
*์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ ์ ์ด๊ณ ๊ฐ๋จํ ๊ฐ์ด ํ ๋น๋ ๋ณ์๋ ์ ์ฅ๋๋ค.
-ํ ์์ญ: ์ฌ์ฉ์๊ฐ ๊ด๋ฆฌํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ ํ์ ์ด ์ ์ฅ๋๋ ์์ญ
*์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๊ฐ์ฒด, ๋ฐฐ์ด๊ณผ ๊ฐ์ด ํฌ๊ธฐ๊ฐ ๋์ ์ผ๋ก ๋ณํ ์ ์๋ ์ฐธ์กฐ ํ์ ์ ๊ฐ์ ์ ์ฅํ๋ค.
ex) ๋ฐฐ์ด์ ์์ฑํ ๊ฒฝ์ฐ
const arr = [];
arr. push(1);
arr. push(2);
arr. push(3);
์ฝ์คํ์๋ arr = (๋ฉ๋ชจ๋ฆฌ ์ฃผ์, ํ์์ ์์ฑ๋ ๋ฐฐ์ด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์ฐธ์กฐ) ์ด๋ ๊ฒ ์ ์ฅ๋๊ณ
ํ์์๋ (๋ฉ๋ชจ๋ฆฌ ์ฃผ์, [])์ด๋ ๊ฒ ๋ฐฐ์ด ์์ญ์ด ์์ฑ๋๋ค.
์ด๋ฐ ์์ผ๋ก! ๊ทธ๋ฆฌ๊ณ ์ด ๋ค์ ๊ฐ์ push ํ๊ฒ ๋๋ฉด ํ์ ์ ์ฅ๋ ์ฐธ์กฐ ํ์ ์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋๋ฐ ์ด๋ ์ฝ์คํ์ ์ ์ฅ๋ arr์์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์๋๋ผ ํ์ ์๋ ์ฐธ์กฐ ํ์ ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค.
๐ญ๋ฐฐ์ด ์
์ด๋ ดํ์ด ์๊ณ ์์๋ ํ๊ณผ ์คํ์ ๊ฐ๋ , ์ด๋ค ์์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๊ณ ์ด๋ป๊ฒ ํด์ ๋๋์ง ์ ์ ์์ด์ ์ข์๋ค. ํธ์ด์คํ ์ ๊ฒฝ์ฐ๋ ์ด์ ์๋ var ๋ณ์์ ํจ์๋ง ํธ์ด์คํ ๋๊ณ let๊ณผ const๋ ์๋๋ค! ๋ผ๊ณ ์๊ณ ์์๋๋ฐ ์ด๋ฒ ๊ธฐํ์ ์ฐพ์๋ณด๋ฉด์ ์ฌ์ค์ ๋ชจ๋ ์ ์ธ์ด ํธ์ด์คํ ๋๊ณ ์ด๊ธฐํ์ ์ฌ๋ถ์ ๋ฐ๋ผ ์ฐธ์กฐ์๋ฌ๊ฐ ๋๋๊ฐ ์๋๋๊ฐ๋ก ๋๋๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
๐ป์์ผ๋ก ๋ฐฐ์ฐ๊ณ ์ถ์ ๊ฒ
-์คํ ์ปจํ ์คํธ์ ๋ํด ์์๋ณด๊ธฐ
-ํด๋ก์ ์ ๋ํด ์์๋ณด๊ธฐ
์ฐธ๊ณ ์๋ฃ
-ํ๋ก๊ทธ๋๋จธ์ค ๋ฐ๋ธ์ฝ์ค ๊ฐ์
'์ผ์ > Today I Learned' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐ๋ธ์ฝ์ค Day5] 2022.10.21 (7) | 2022.10.21 |
---|---|
[๋ฐ๋ธ์ฝ์ค Day2] 2022.10.18 (0) | 2022.10.18 |
2022.10.12 (0) | 2022.10.12 |
2022.10.11 (0) | 2022.10.11 |
2022.10.10 (0) | 2022.10.10 |