
์ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ฐ์ ํ์
์ ํฌ๊ฒ ๊ธฐ๋ณธํ(Primitive Type)๊ณผ ์ฐธ์กฐํ(Reference Type)์ผ๋ก ๊ตฌ๋ถํ๋ค.
์ฌ๊ธฐ์ ๊ธฐ๋ณธํ๊ณผ ์ฐธ์กฐํ์ ๊ตฌ๋ถ ๊ธฐ์ค์ ๊ฐ์ ์ ์ฅ๋ฐฉ์๊ณผ, ๋ถ๋ณ์ฑ ์ฌ๋ถ์ด๋ค.
๐ก ๊ธฐ๋ณธํ๊ณผ ์ฐธ์กฐํ์ ๊ตฌ๋ถ ๊ธฐ์ค
- ๋ณต์ ์ ๋ฐฉ์
- ๊ธฐ๋ณธํ : ๊ฐ์ด ๋ด๊ธด ์ฃผ์๊ฐ์ ๋ฐ๋ก ๋ณต์
- ์ฐธ์กฐํ : ๊ฐ์ด ๋ด๊ธด ์ฃผ์๊ฐ๋ค๋ก ์ด๋ฃจ์ด์ง ๋ฌถ์์ ๊ฐ๋ฆฌํค๋ ์ฃผ์๊ฐ์ ๋ณต์ - ๋ถ๋ณ์ฑ์ ์ฌ๋ถ
- ๊ธฐ๋ณธํ : ๋ถ๋ณ์ฑ์ ๋
- ์ฐธ์กฐํ : ๋ถ๋ณ์ฑ์ ๋์ง ์์
์ฌ๊ธฐ์ ๋ถ๋ณ์ฑ์ ๋๋ค๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ์ ๋ํ ๋ด์ฉ์ผ๋ก ์ดํด๋ฅผ ํด์ผํ๋ค.
- ๊ฐ๋ณ์ฑ / ๋ถ๋ณ์ฑ์ ๊ตฌ๋ถํ๋ ค๋ฉด ๋ฐ์ดํฐ์์ญ์ ํ์ธํ๋ฉด ๋๋ค.
- ์์ / ๋ณ์๋ฅผ ๊ตฌ๋ถํ๋ ค๋ฉด ๋ณ์์์ญ์ ํ์ธํ๋ฉด ๋๋ค.
๋ถ๋ณ์ฑ์ ์ดํดํ๊ธฐ ์ํด์๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ์ ๊ดํด ์ดํด๋ฅผ ํด์ผํ๋ค.
- ๋นํธ
- ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ ๊ฐ์ฅ ์์ ๋จ์
- 0๊ณผ 1์ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฅ ์์ ๋จ์๋ค์ด ๋ชจ์ฌ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ง๋ค์ด ์ง๋๊ฒ.- ๋ฐ์ดํธ
- 8๊ฐ์ ๋นํธ๋ฅผ ๋ฌถ์ด๋ ์๋ก์ด ๋จ์- ๋ฉ๋ชจ๋ฆฌ : byte ๋จ์๋ก ๊ตฌ์ฑ
- ๋ชจ๋ ๋ฐ์ดํฐ๋ byte๋จ์์ ์๋ณ์์ธ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ์ ํตํด ์๋ก ๊ตฌ๋ถํ๋ค.
// ์ ์ธ๊ณผ ํ ๋น์ ํ์ด ์ด ๋ฐฉ์
let str;
str = 'test';
// ์ ์ธ๊ณผ ํ ๋น์ ๋ถ์ฌ ์ด ๋ฐฉ์
let str = 'test';
| ์ฃผ์ | ๋ฐ์ดํฐ | ์ฃผ์ | ๋ฐ์ดํฐ |
|---|---|---|---|
| 1002 | str / @5002 | 5002 | 'test' |
| 1003 | 5003 | ||
| 1004 | 5004 |
โ๏ธโ๏ธโ๏ธ์์ผ๋ก ์์๋ก 1000๋ฒ๋ ์ฃผ์๋ ๋ณ์์ ์์ญ 5000๋ฒ๋์ ์ฃผ์๋ ๋ฐ์ดํฐ ์์ญ์ด๋ผ๊ณ ์ ์ธ์ ํด๋๊ฒ ๋ค โ๏ธโ๏ธโ๏ธ
๊ฐ์ ๋ฐ๋ก ๋ณ์์ ๋์
ํ์ง ์๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์์ ๋ก์ด ๋ฐ์ดํฐ ๋ณํ
โ ์ด๋ฏธ ๋์ ํ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ ๊ธธ์ด์ง๊ฒ ๋๋ค๋ฉด ์ดํ ์ฃผ์๊ฐ์ ์๋ ๋ฐ์ดํฐ๋ค์ ๋ค ๋ค๋ก ๋ฏธ๋ค์ผ ํ๋ค๋ ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
ex) 1003๋ฒ ์ฃผ์๋ฅผ ์ด๋ฏธ์ฌ์ฉ์ค์ด๋ผ๊ณ ํ ๋ 1002๋ฒ ์ฃผ์์ ๋ฌธ์์ด๋ฐ์ดํฐ ๊น์ง ๊ฐ์ด ๋ฃ์๋๋ฐ ๋ฐ์ดํฐ๊ฐ ๊ธธ์ด์ ธ์ ๋ค์ ์ฃผ์๋ฅผ ํ ๋น๋ฐ์ผ๋ ค๋ฉด 1003๋ฒ ์ฃผ์๋ 1004๋ฒ์ผ๋ก ... ๋ชจ๋ ์ฃผ์๊ฐ ๋ฐ๋ฆฌ๊ฒ ๋๋ค.
โ ๋ํ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ๊ฐ์ ๋ณ์์ ๋์ ํ๋ค๊ณ ๊ฐ์ ์ ํด๋ณธ๋ค๋ฉด ๋ฐ์ดํฐ ์ฃผ์๋ ํ๋๋ง ํ์ํ๊ณ ๋ณ์๋ฅผ ์ ์ฅํ๋ ์ฃผ์๋ง ์ฌ๋ฌ๊ฐ ์์ผ๋ฉด ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋ณ์๋ฅผ ์ ์ฅํ๋ ์ฃผ์์ ๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ(๋ฐ์ดํธ)๋ฅผ ๋ง์ด ๊ฐ์ ธ๊ฐ๊ธฐ ๋๋ฌธ
์ง๊ธ๊น์ง๋ ๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ฅผ ์ดํดํ๊ธฐ ์ํ ์ค๋ช ์ด์๋ค..๐
๊ธฐ๋ณธํ ๋ฐ์ดํฐ์๋ Number / String / Boolean / null / undefined / Symbol ๋ฑ์ด ์๋ค.์ฐธ์กฐํ ๋ฐ์ดํฐ์๋ Array / Function / Date / RegExp / Map, WeakMap / Set, WeakSet๋ฑ์ด ์๋ค.
๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณ์(let)์ ์์(const)๋ฅผ ๋๋๋ ๋ฐฉ๋ฒ์ โก๏ธ ๋ณ์์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉด ๋ณ์ ๋ณ์์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉด ์์๋ผ๊ณ ํ ์ ์๋ค.
// 'abc'๋ผ๋ ๊ฐ์ด ๋ฐ์ดํฐ ์์ญ์ @5002 ์ฃผ์์ ๋ค์ด๊ฐ๋ค๊ณ ๊ฐ์ ์ ํ๊ณ ์ ์ธ
let a = 'abc';
// ์ฌ๊ธฐ์ @5002 ์ฃผ์์ 'def'๋ผ๋ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ ๋๊ฒ์ด ์๋๋ผ,
//@5003์ 'abcdef'๋ผ๋ ๊ฐ์ด ์๊ธฐ๊ณ
// ๋ณ์ a๋ @5002 โก๏ธ @5003์ฃผ์๋ก ๋ณํ๊ฒ์ผ ๋ฟ์ด๋ค. ๋ฟ
a = a + 'def'; // a = 'abcdef'
// ์ฆ, ๋ณ์ a๋ ๋ถ๋ณํ๋ค. ๋ผ๊ณ ํ ์ ์๋๊ฒ
// ์ด ๋, @5002๋ ๋์ด์ ์ฌ์ฉ๋์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋น์ง์ปฌ๋ ํฐ์ ์๊ฑฐ ๋์์ด ๋๋ค.
โฌ๏ธ ์ ์ฝ๋์ ์ค๋ช
์ฒ๋ผ ๋ฐ์ดํฐ ์ฃผ์์ ์๋ ๊ฐ์ด ์ง์ ์ ์ผ๋ก ๋ณํ๊ฒ์ด ์๋ ์๋ก์ด ์ฃผ์์ ๋ฐ์ดํฐ๊ฐ ์์ฑ๋๊ณ ๊ทธ ์ฃผ์๊ฐ์ ๋ณ์์ ๋ณด๋ด์ค๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ณ์ a๋ ๋ถ๋ณํ ๊ฒ์ด๋ค. โก๏ธ ๊ทธ๋ ๋ค๋ ๋ง์ ๋ณ์ a๋ ๊ธฐ๋ณธํ ๋ฐ์ดํฐ ์ธ๊ฒ์ด๋ค.
let obj1 = {
a: 1,
b: 'bbb',
}
โฌ๏ธ์ ์ฝ๋์์ ๋ฉ๋ชจ๋ฆฌ ํ ์ด๋ธ์ ๋ณธ๋ค๋ฉด โฌ๏ธ ์๋์ ๊ฐ๋ค.
| ์ฃผ์ | ๋ฐ์ดํฐ | ์ฃผ์ | ๋ฐ์ดํฐ | ์ฃผ์ | ๋ฐ์ดํฐ |
|---|---|---|---|---|---|
| 1002 | obj1/@7003~@7004 | 5002 | 1 | 7103 | a/@5002 |
| 1003 | 5003 | 'bbb' | 7104 | b/@5003 | |
| 1004 | 5004 | 7105 |
๋ฐ์ดํฐ ์ฃผ์(@5000๋ฒ๋)์๋ ๊ฐ์ฒด์ value๊ฐ์ ๋ฃ์ด์ฃผ๊ณ , Obj1๋ณ๋ ์ฃผ์(@7000๋ฒ๋)์๋ key๊ฐ๊ณผ value๊ฐ์ด ์๋ ์ฃผ์๋ฅผ ๋ฃ์ด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด์ key๊ฐ๊ณผ value๊ฐ ์ฃผ์๊ฐ ์๋ ์ฃผ์๋ฅผ ๋ณ์ ์ฃผ์(@1000๋ฒ๋)์ ๋ฃ์ด์ฃผ๋๊ฒ์ด๋ค.
๊ธฐํธ๋ก @{์์ ์๋๊ฒ์ ๋ค๋ฅธ ์ฃผ์์ ์ ์ฅ๋ ๊ฐ์ด๋ผ๊ณ ๊ฐ์ ์ ํด๋ณด๊ฒ ๋ค.}
โก๏ธ { obj1์๋ณ์ @{ ๊ฐ์ฒดKey @{ Value }}}
์ด๋ฐ ์์ผ๋ก ํํํ ์ ์์๊ฒ ๊ฐ๋ค.
obj1.a = 2; // ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ค๋ฉด
โฌ๏ธโฌ๏ธ์์์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ํ
์ด๋ธ์์ @5004์ 2๋ผ๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ๊ณ ๊ทธ์ ๋ฐ๋ผ @7001๋ฒ์ ์๋ ๋ฐ์ดํฐ๊ฐ a/@5004๋ก ๋ณ๊ฒฝ์ด ๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ์ ์ด๋์๋ ๊ฒ์ฒ๋ผ ๋ฐ์ดํฐ์์ญ์ธ @7000๋ฒ๋ ์ฃผ์์ ๋ณ๊ฒฝ์ด ์๊ฒผ๊ธฐ ๋๋ฌธ์ ๋ถ๋ณํ์ง ์๋ค (๊ฐ๋ณํ๋ค). โก๏ธ ๊ทธ๋ ๊ธฐ์ Object๋ ์ฐธ์กฐํ ๋ฐ์ดํฐ์ธ ๊ฒ์ด๋ค.
let obj = {
x: 3,
arr: [3, 4, 5],
}
| ์ฃผ์ | ๋ฐ์ดํฐ | ์ฃผ์ | ๋ฐ์ดํฐ | ์ฃผ์ | ๋ฐ์ดํฐ | ์ฃผ์ | ๋ฐ์ดํฐ |
|---|---|---|---|---|---|---|---|
| 1002 | obj/@7103~7104 | 5002 | 3 | 7103 | x/@5002 | 8103 | 0/@5002 |
| 1003 | 5003 | 4 | 7104 | arr/@8103~8105 | 8104 | 1/@5003 | |
| 1004 | 5004 | 5 | 7105 | 8105 | 2/@5004 |
์ค์ฒฉ๊ฐ์ฒด์ ๊ฒฝ์ฐ ๊ธฐ์กด ๊ฐ์ฒด์ ํ ๋นํ๋ ๋ฐฉ์์์ @8000๋ฒ๋(์์์ ์ฃผ์)์ ์ฃผ์๋ฅผ ํ ๋นํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํด์ฃผ๋ ๊ฒ์ ์ ์ ์๋ค.

โฌ๏ธ์ ๊ทธ๋ฆผ์์ ์ค๋ช ํ๊ฒ ์ฒ๋ผ ๊ธฐ๋ณธํ ๋ณ์๋ฅผ ๋ณต์ฌํ๋ฉด ์๋ก ๋ค๋ฅธ ๊ฐ์ด ์์ฑ๋์ด ๊ฐ ๋ณ์์ ์ํฅ์ด ์์ง๋ง, ์ฐธ์กฐํ ๋ณ์๋ฅผ ๋ณต์ฌ์ ์๋ก ๊ฐ์ ์ฃผ์๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์๊ธฐ ๋๋ฌธ์ ์ํฅ์ด ๊ฐ๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฐธ์กฐํ ๋ณ์๋ฅผ ์ํฅ์ด ๊ฐ์ง ์๊ฒ ๋ณต์ฌ๋ฅผ ํ๊ณ ์ถ๋ค๋ฉด ์ฌ์ ์ธ์ ํด์ค์ผํ๋ค.
๐ก ์ฐธ์กฐํ ๋ฐ์ดํฐ๊ฐ
๊ฐ๋ณ๊ฐ์ด๋ผ๊ณ ํ ๋์๊ฐ๋ณ์ ์ฐธ์กฐํ ๋ฐ์ดํฐ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ, ๊ทธ ๋ด๋ถ์ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ ๋ ์ฑ๋ฆฝํ๋ค๊ณ ํ ์ ์๋ค.
๐ก ๊ฐ์ฒด์ ์์ฑ์ ์ ๊ทผํด์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด
๊ฐ๋ณ์ด ์ฑ๋ฆฝํ๋ค. ํ์ง๋ง ๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ๊ธฐ์กด ๊ฐ์ฒด๋ ๋ณํ์ง ์๊ณ (์ฆ, ๋ถ๋ณ) ๋ณต์ฌํ ๊ฐ์ฒด์ ๊ฐ๋ง ๋ณํ๋๋ก ๊ตฌํ์ ํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค. ์ด๋์์ ๋ณต์ฌ์๊น์ ๋ณต์ฌ์ ๊ฐ๋ ์ด ์๋ค.
๋ค์์ ์์๋ณต์ฌ๋ฅผ ํ๋ ํจํด์ด๋ค.
// copyObj๋ผ๋ ํจ์์ ๊ฐ์ฒด๊ฐ ๋ค์ด์ค๋ฉด
let copyObj = function (target) {
let result = {};
// for in์ ๋๋ฆฐ๋ค. ( for in๋ฌธ์ ๊ฐ์ฒด์ ์ง์ ์ฐธ์กฐํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ)
for(const prop in target) {
// result๊ฐ์ฒด ์์ target(๋งค๊ฒ๋ณ์๋ก ๋ด๋ ค์ค ๊ฐ์ฒด)์ ๊ฐ๋ค์ ์ ์ฅ
result[prop] = target[prop]
}
return result
}
โฌ๏ธ์ ์ฝ๋์ฒ๋ผ ์์๋ณต์ฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถ๋ณ๊ฐ์ฒด๋ฅผ ์์ฑ ํ ์ ์๋ค. ์ฒ์ ์์ฑํ๋ obj1 ๊ณผ ์์๋ณต์ฌ๋ฅผ ํตํด ๋ฐํ๋ obj2 ๋ ์๋ก ๋ค๋ฅธ ์ฃผ์๋ฅผ ๊ฐ์ ์ ์๊ฒ ๋๊ฒ์ด๋ค. obj2.value๋ฅผ ๋ณ๊ฒฝํ๋ฉด obj1 === obj2 ๋ผ๋ ์กฐ๊ฑด์์ false๋ฅผ ๋ฐํํ๋ค.
ํ์ง๋ง ์๋ฒฝํด๋ณด์ด๋ ์์ ๋ณต์ฌ์๋ ๋ฌธ์ ์ ์ด ์กด์ฌํ๋ค. ์์๋ณต์ฌ๋ ๋ง ๊ทธ๋๋ก for in์ ์ด์ฉํด ๊ฐ์ฒด๋ฅผ ํ๋ฒ๋ง ์ํํ๋ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ ์ค์ฒฉ ๊ฐ์ฒด์ ๊ฒฝ์ฐ์๋ ๋ถ๋ณ๊ฐ์ฒด์ ํน์ฑ์ ๊ฐ์ง ๋ชปํ๋ค.
๊น์ ๋ณต์ฌ๋ ์์์ ์ค๋ช
ํ๋ ๋ฌธ์ ์ ๋ค์ ๋ณด์ํ ์์๋๋ก ์ฌ๊ท์ ์ํ์ ํ๋๊ฒ์ด๋ค.
var copyObjectDeep = function(target) {
var result = {};
if (typeof target === 'object' && target !== null) {
// target์ด ๊ฐ์ฒด์ํ๋ก ์กด์ฌํ๊ฑฐ๋ ๋น์ด์์ง ์๋ค๋ฉด
for (const prop in target) {
// forin์ผ๋ก target์ ์ฐธ์กฐํ๋ค.
result[prop] = copyObjectDeep(target[prop]);
// copyObjectDeep() ๋ก ์ฐธ์กฐํ ๊ฐ์ ๋ฃ์ด์ค๋ค.
// ์ด๋, target[prop]์ ๊ฐ์ฒด๊ฐ ์๋ ๊ฒฝ์ฐ๋ ์๋ else๋ฌธ์ ์คํํ๊ฒ ๋๋ค.
}
} else {
result = target;
}
return result;
// ์ด๋ ๊ฒ ๋๋ค๋ฉด ์ค์ฒฉ ๊ฐ์ฒด ๊น์ง ๋ถ๋ณ๊ฐ์ฒด๋ก ๋ณต์ฌ๊ฐ ๊ฐ๋ฅํ๋ค.
}
JSON์ ์ด์ฉํ์ฌ ๊น์ ๋ณต์ฌ๋ฅผ ํ ์๋ ์๋ค.
๐ ํ์ง๋ง ์ด ๋ฐฉ์์๋ ๋ฌธ์ ๋ ์กด์ฌํ๋ค.
์ค์ฒฉ ๊ฐ์ฒด์์๋์ํ์ฐธ์กฐ๋ฅผ ํ ์ ์์ผ๋ฉฐ,ํจ์๋undefined์ ๊ฐ์์์ฑ๊ฐ์ ๋ณต์ฌ๋์ง ์๋๋ค.
๐ ๊ทธ๋ ๊ธฐ ๋๋ฌธ์๊ตฌ์กฐ๊ฐ ๊ฐ๋จํ๊ณ ,ํจ์๋ undefined์ ๊ฐ์ ์์ฑ๊ฐ์ด ์๋ ๊ฒฝ์ฐ์ ์ ํฉํ ๋ฐฉ์์ด๋ค. ๋ง์ผ ๊ฐ์ฒด์ ๊ตฌ์กฐ๊ฐ ๋ณต์กํ๊ฑฐ๋์ํ ์ฐธ์กฐ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋ค๋ฅธ๊น์ ๋ณต์ฌ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผํ๋ค.
์ฌ์ฉ๋ฐฉ๋ฒ์ ๋ฌด์ฒ ๊ฐ๋จํ๋ค. JSON.stringify() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ๊ณ , ๋ค์ JSON.parse()ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.