0. ๋ฏธ๋ฆฌ๋ณด๋ ๊ฒฐ๋ก
๋ถ๋ณ๊ฐ๊ณผ ๊ฐ๋ณ๊ฐ์ ๋ฐ์ดํฐ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋๊ฐ์ ๋ฐ๋ผ ๋๋๋ค.
๊ธฐ๋ณธํ ๋ฐ์ดํฐ ํ์
์ ๊ฐ์ ๋ณ๊ฒฝํ ๋๋ ๋ฐ์ดํฐ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ (๋ถ๋ณ์ฑ) ๋ณ์์ ๊ฐ๋ง ์ฌํ ๋นํ๋ ๋ฐ๋ฉด,
์ฐธ์กฐํ ๋ฐ์ดํฐ ํ์
์ ๊ฐ์ ๋ฌถ์์ ๊ฐ๋ฆฌํค๋ ์ฃผ์๊ฐ์ ๊ฐ์ง๋ฉฐ ์ด ์ฃผ์์ ์๋ ๊ฐ์ ๋ฐ์ดํฐ ์์ญ์ ์์นํ์ฌ ๊ฐ์ฒด ๋ด๋ถ ๋ณ์๋ค์ ์ฃผ์๊ฐ์ ์ฐธ์กฐํ๊ณ ์๊ธฐ ๋๋ฌธ์, ํ๋กํผํฐ ๋ณ๊ฒฝ ์ ๋ฐ์ดํฐ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ์ฌ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค.(๊ฐ๋ณ์ฑ)
1. ๋ณ์์ ๊ฐ์ ํ ๋นํ๋ ๊ณผ์
- ๋ฐ์ดํฐ ์์ญ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ์ง์ ๋ฐ๊พธ์ง ์๋๋ค.
- ๊ฐ์ ์ฌํ ๋นํจ์ผ๋ก์จ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ค.
1) ๋ฐ๊พธ๊ณ ์ ํ๋ ๊ฐ์ ๊ฒ์ํ๋ค.
2-1) ๊ฐ์ด ์กด์ฌํ๋ฉด, ๊ทธ ๋ฐ์ดํฐ์ ์ฃผ์๊ฐ์ ํ ๋นํ๋ค
2-2) ๊ฐ์ด ์กด์ฌํ์ง ์๋ค๋ฉด, ์๋ก ๋ฐ์ดํฐ๋ฅผ ๋ง๋ ๋ค.
3) ์ฌํ ๋น ๊ณผ์ ์์ ์ฐธ์กฐ๋๊ณ ์์ง ์์ ๋ฉ๋ชจ๋ฆฌ๋ GC๊ฐ ๋ณ๋๋ก ์ปฌ๋ ํ
ํด๊ฐ๋ค.
2. ๊ธฐ๋ณธํ ๋ฐ์ดํฐ ํ์
var a = 'abc';
var b = 'aaa';
a = 'aaa';

๋ณ์ a์ ๋ฐ์ดํฐ๋ 'abc'๋ฅผ 'aaa'๊ฐ์ผ๋ก ๋ฐ๊พผ ๊ฒ์ด ์๋๋ผ, 'aaa'๋ก ์ฌํ ๋นํ ๊ฒ์ด๋ค. @5003์ ์๋ ๋ฐ์ดํฐ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ , @5004๋ฅผ ์ฌํ ๋นํ๋ฉฐ, ํ์ @5003์ ์ฐธ์กฐํ๋ ๋ณ์๊ฐ ์๊ธฐ ๋๋ฌธ์ GC๊ฐ ์๊ฑฐํ๋ค.
์ด์ฒ๋ผ ๋ฐ์ดํฐ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ๋ณ๊ฒฝํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธํ ๋ฐ์ดํฐ ํ์
์ ๋ถ๋ณ์ฑ์ ๋๋ค๊ณ ํ ์ ์๋ค.
4
3. ์ฐธ์กฐํ ๋ฐ์ดํฐ ํ์
์ฐธ์กฐํ ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์ด ๋ด๊ธด ์ฃผ์๊ฐ๋ค๋ก ์ด๋ฃจ์ด์ง ๋ฌถ์์ ๊ฐ๋ฆฌํค๋ ์ฃผ์๊ฐ์ ๊ฐ๊ณ ์๋ค.
var obj1: { a : 1 , b : 'aaa' };
obj1.a = 'aaa';

obj1์ obj1.a๋ผ๋ ํ๋กํผํฐ ๊ฐ์ด ๋ณ๊ฒฝ๋์์๋, obj1 ์ฃผ์๊ฐ์ @5002๋ก ์์ ๊ณผ ๋์ผํ๋ค.
๊ฐ์ฒด ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ฌํ ๋นํ๋ค๊ณ ํด์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํฐ ์์ญ์ ํ ๋นํ์ง ์๋๋ค. ์ฃผ์๊ฐ์ ๊ทธ๋๋ก ์ ์งํ์ฑ ๊ฐ์ฒด ๋ด๋ถ์ ๋ฐ์ดํฐ์ ์ฃผ์๊ฐ์ ๊ฐฑ์ ํ๋ค. ๊ทธ๋ ๊ฒ๋๋ฉด obj1์ ๋ฐ์ดํฐ๋ @5002๋ก ๋์ผํ์ง๋ง ๊ทธ ์์ ๋ฐ์ดํฐ๋ ์๋กญ๊ฒ ๋ณ๊ฒฝ๋ ๊ฒ ์ฒ๋ผ ๋ณด์ธ๋ค. ๋ฐ์ดํฐ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ๋ณ๊ฒฝํ์ง ์์ ๊ธฐ๋ณธํ ๋ฐ์ดํฐ ํ์
๊ณผ ๋ค๋ฅด๊ฒ, ์ฐธ์กฐํ ๋ฐ์ดํฐ ํ์
์ ๋ฐ์ดํฐ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ(@5002)์ ๊ฐ์ธ @7001~์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ค๋ ์ ๋๋ฌธ์ ๊ฐ๋ณ์ฑ์ ๋๋ค๋ผ๊ณ ํ ์ ์๋ค.
4. ์ ๋ฆฌ
๋ถ๋ณ์ฑ๊ณผ ๊ฐ๋ณ์ฑ์ ๋ ผํ๊ธฐ ์ํด์ , Primitive type, Non-primitive type์ผ๋ก ๋ฐ์ดํฐ ํ์ ์ ๊ตฌ๋ถํ๋ ๊ฒ์ด ์๋ฏธ๊ฐ ๋ช ํํด์ง๋ค. ๋ชจ๋ JS์ ๋ณ์๋ Primitive type์ ๋ณ์ ํ ๋น ๊ณผ์ ์ ๋ฐ๋ฅธ๋ค. ํ์ง๋ง ๋ฐ์ดํฐ์ ๋ฌถ์์ ํํํ๊ธฐ ์ํด Non-primitive type์ด ๋ฑ์ฅํ๋ฉด์ ์๊ธฐ๊ฐ ๋ฌ๋ผ์ง๋ค. Non-primitive type์ผ๋ก ๋ณ์๋ฅผ ๋ง๋ค๋ฉด, ๋ฌถ์์ ๊ฐ๋ฆฌํค๋ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ฒ ๋๋๋ฐ, ์ด ๋ฐ์ดํฐ ๋ด๋ถ์ ๊ฐ์ ๊ฐ์ฒด ๋ด๋ถ์ ๋๋ค๋ฅธ ๋ณ์ ์์ญ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Non-primitive type์ ๊ฐ์ ๋ณ๊ฒฝํ์ง ์์๋ ๋ด๋ถ ๋ณ์์ ๊ฐ์ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค. ๋ฐ๋ผ์ ๋ด๋ถ ๋ณ์๋ฅผ ๋ฐ๊ฟ ๊ฒฝ์ฐ, Non-primitive type์ ์ฃผ์๊ฐ์ ๋์ผํ์ง๋ง, ์ค์ ๋ฐ์ดํฐ๋ ์๋กญ๊ฒ ๋ณ๊ฒฝ๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค. ๋ณ์(Non-primitive type)์ ๊ฐ์ ๊ฐ์๋ ๊ทธ ์์ ๋ฐ์ดํฐ(๊ฐ์ฒด ๋ด๋ถ์ ๋๋ค๋ฅธ ๋ณ์ ์์ญ)๋ ๋ฌ๋ผ์ง ๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์, ์ด ์ฑ์ง์ ๊ฐ๋ณ์ฑ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
5. ์ถ๊ฐ
๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ์ ๋ ๋ณ๊ฒฝ ์ ์ ๋ฐ์ดํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐ๊พธ๋์ง์ ๋ฐ๋ผ ๋ถ๋ณ๊ฐ๊ณผ ๊ฐ๋ณ๊ฐ์ด ๋๋๋ค.
๊ธฐ๋ณธํ ํ์ ์ ๋ณ์๋ ๊ฐ์ ๋ณ๊ฒฝํ์ ๋, ๋ณ์์ ํ ๋น ๊ฐ๋ง ๋ฐ๋๋ฟ ์ค์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ ์๋ ๋ฉ๋ชจ๋ฆฌ์๋ ๋ณํ๊ฐ ์์ง๋ง, ์ฐธ์กฐํ ํ์ ์ ๋ณ์๋, ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ์ ๋๋ฅผ ํ์ ํด, ๋ฐ์ดํฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ณํ๊ฐ ์๊ธด๋ค. ์ด๋ ์ฐธ์กฐํ ํ์ ๋ณ์๋ ๋ด๋ถ ๋ณ์๋ค์ ์ฃผ์๊ฐ๋ค์ ๋ฌถ์์ ๊ฐ๋ฆฌํค๋ ๋ฐ์ดํฐ ์์ญ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๊ฐ์ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ๋ฐ์ดํฐ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ ์ฐธ์กฐํ ํ์ ์ ๋ด๋ถ ๋ณ์๋ค์ ์ฃผ์๊ฐ๋ค์ด ๋ค์ด๊ฐ ์๊ธฐ ๋๋ฌธ์, ๋ด๋ถ ๋ณ์์ ๊ฐ์ด ๋ฐ๋ ๋ ๋ง๋ค ๋ฐ์ดํฐ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐ๋์ด ๊ฐ๋ณ์ฑ์ด ์๋ค๋ผ๊ณ ํ๋ค.
6. ๊ฐ๋ณ์ฑ์ด๋ ์๋ณธ์ ํผ์ ๊ฐ๋ฅ์ฑ์ ๋ปํ๊ธฐ๋ ํ๋ค.
var a = 1
var b = a
a = 9999
console.log(b) // 100
- a๋ 1์ด๋ผ๋ ๋ฐ์ดํฐ ์์ญ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ์ ๋ฐ๋ก ๊ฐ๋ฆฌํค๊ณ ์๊ธฐ ๋๋ฌธ์ b๋ 1์ ์ฃผ์๊ฐ์ ๋ณต์ฌํ๊ฒ ๋์ด, ๊ทธ ํ์ a๊ฐ์ด ๋ณํ๋๋ผ๋ b์ ๊ฐ์ ๋ณํ์ง ์๋๋ค. b๋ผ๋ ์๋ณธ์ด a๋ผ๋ ๋ค๋ฅธ ๋ณ์์ ๊ฐ์ ์ฌํ ๋นํ๋๋ผ๋ ๊ฐ์ด ๋ณํ์ง ์๊ธฐ ๋๋ฌธ์, ํผ์๋์ง ์๊ธฐ ๋๋ฌธ์, ๋ถ๋ณ๊ฐ์ด ๋๋ ๊ฒ์ด๋ค.
var obj1 = {a:1}
var obj2 = obj1
obj1.a = 9999
console.log(obj2.a) // 9999
- obj1์ ๋ฐ์ดํฐ ๋ฌถ์์ ๊ฐ๋ฆฌํค๊ณ ์๋ ์ฃผ์๊ฐ์ ๊ฐ๋ฆฌํค๊ณ ์๊ณ , ์ด๋ฅผ obj2๊ฐ ๋ณต์ฌํ๊ธฐ ๋๋ฌธ์ obj1์ ํ๋กํผํฐ๊ฐ ๋ณํจ์ ๋ฐ๋ผ obj2์ ํ๋กํผํฐ๋ ๋ณํ๋ค. obj2๋ผ๋ ์๋ณธ์ด obj1์ด๋ผ๋ ๋ณ์์ ๋ด๋ถ ํ๋กํผํฐ๋ฅผ ์ฌํ ๋นํ๋ฉด ๊ฐ์ด ๋ณํ๊ธฐ ๋๋ฌธ์, ํผ์๋๊ธฐ ๋๋ฌธ์, ๊ฐ๋ณ๊ฐ์ด๋ผ๊ณ ํ๋ค.
var obj1 = {a:1}
var obj2 = {...obj1}
obj1.a = 9999
console.log(obj2.a) // 1
- obj2๋ {}, ๊ฐ์ฒด๋ฆฌํฐ๋ด ๋ฐฉ์์ผ๋ก ์๋ก์ด ๋ณ์๋ฅผ ๋ง๋ค์๊ธฐ ๋๋ฌธ์ obj1๊ณผ obj2๋ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ ๋ฌถ์์ ๊ฐ๋ฆฌํจ๋ค. ๊ทธ ํ obj2๋ Spread Operator๋ฐฉ์์ผ๋ก obj1์ ๋ด๋ถ ํ๋กํผํฐ๋ฅผ ๋ณต์ฌํ๋ค. obj1์ด ์ค์ฒฉ ๊ฐ์ฒด๋ก ๋ง๋ค์ด์ง์ง ์๋ ์ด์, obj2์ ๋ด๋ถ ํ๋กํผํฐ๋ ๊ฐ์ ๋ฐ์ดํฐ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐ๋ก ๋ณต์ฌํด์, obj1์ ๋ด๋ถ ํ๋กํผํฐ๊ฐ ๋ณํ๋๋ผ๋ obj2์ ๊ฐ์ ๋ณํ์ง ์๊ธฐ ๋๋ฌธ์, obj2๋ผ๋ ์๋ณธ์ ํผ์์ํค์ง ์์, ๋ถ๋ณ๊ฐ์ด๋ผ๊ณ ํ ์ ์๋ค.
'๐ Front > ๐ฑ Vanilla JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [DOM] Javascript๋ก html์ ์กฐ์ํด๋ณด์ (0) | 2022.01.17 |
|---|---|
| ํ๋กํ ํ์ : ์๋ฐ์คํฌ๋ฆฝํธ์ ํต์ฌ ์ฒ ํ (์ ๋ฆฌ) (0) | 2022.01.11 |
| ์คํฌ๋ฆฝํธ(script) ์ถ๊ฐ/์ ๊ฑฐํ๋ ๋ฒํผ ๋ง๋ค๊ธฐ (0) | 2021.11.22 |
| [Iterable VS Enumerable] ๊น๋ํ๊ฒ ์ ๋ฆฌํ๊ณ ๊ฐ์๋ค (0) | 2021.11.19 |
| arguments ๊ฐ์ฒด: function์์ ์๋ ๋, ๋๊ฐ ์ ์ธํ๋? (0) | 2021.11.18 |