๐ ๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ ์ฐธ์กฐํ ๋ฐ์ดํฐ
์์ผ๋ก ๋์ฌ ๊ทธ๋ฆผ๋ค์ ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ํ๋ผ ์ ์๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ถ์ํํ ๊ทธ๋ฆผ์ ๋๋ค.
๋ณ์๋ช ๊ณผ ์ฃผ์๋ก ๋ ํ๊ฐ ์๊ณ ์ฃผ์์ ๋ฐ์ดํฐ๋ก ๊ตฌ์ฑ๋ ํ๊ฐ ์๋๋ฐ ์ด ๋๊ฐ๋ ๋ณ๊ฐ์ ์ ์ฅ๊ณต๊ฐ์ ๊ฐ์ง๋ ๊ฒ์ด ์๋๋ผ ํธ์์ ํ๋ฆ๋ ํ์ ์ ์ํด ํ๊ธฐํ ๊ฒ์ ๋๋ค.
๐ 1. ๊ธฐ๋ณธํ ๋ฐ์ดํฐ(Primitive Type)์ ์ ์
๊ธฐ๋ณธํ์๋ ๋ฐ๋ก ๊ฐ์ ๊ทธ๋๋ก ํ ๋นํ๋ค.
๊ธฐ๋ณธ(์์)ํ์๋ Number, String, Boolean, null, undefined ๊ฐ ์์ผ๋ฉฐ ES6 ์์๋ Symbol ๋ ์ถ๊ฐ๋์์ต๋๋ค.
โถ๏ธ var a;
๋ณ์ a ๋ฅผ ์ ์ธํ๋ฉด ์ปดํจํฐ๋ ์ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ๊ณต๊ฐ์ ๋ฏธ๋ฆฌ ํ๋ณดํฉ๋๋ค.
๊ทธ๋ฆผ์์๋ ์์๋ก ์๋ ํ์ ์ฃผ์ 313๋ฒ ๊ณต๊ฐ์ ํ๋ณดํ์ต๋๋ค.
โถ๏ธ a = 10;
โถ๏ธ var b = 'abc';
๐ ์ ์ธ๊ณผ ํ ๋น ?
โถ๏ธ b = false;
๊ทธ ๋ค์ ๋ฌธ์ฅ์์ ๋ค์ b์ false ๋ฅผ ํ ๋น(b = false)ํ๋ผ๊ณ ๋ช ๋ นํ๋ฉด false ๋ฅผ ๋ค๊ณ ์๋ ์ฑ(var ๋ผ๋ ํค์๋๊ฐ ์๊ธฐ ๋๋ฌธ์)๋ก ํ์ฌ ๊ฐ์ง๊ณ ์๋ ๋ณ์๋ช ๋ค ์ค์ b ๊ฐ ์๋ ์ง๋ฅผ ๊ฒ์ํฉ๋๋ค.
๋ง์ฝ b ๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด ์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ธ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋ฉ๋๋ค.
b ๋ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ์์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ b ๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์(@314)๊ฐ์ ์ฝ์ด์ ํด๋น ์ฃผ์์์น๋ก ์ด๋ํ ๋ค์ ๊ทธ ์๋ฆฌ์ false ๋ฅผ ๋ฎ์ด์ฐ๊ฒ ๋ฉ๋๋ค.
โถ๏ธ var c = b;
์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์ ์ด๋ ๊ฒ ์ ์ฅ๋ ๊ธฐ๋ณธํ ๋ฐ์ดํฐ๋ค์ ๊ทธ ์์ฒด๋ก ๋น๊ต๊ฐ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์
๋๋ค.
b ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ ์ ์ฅ๋ false ์ c ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ ์ ์ฅ๋ false ๋ ์์ ํ ๊ฐ์ ๊ฐ์ ๋๋ค.
false ๋ผ๋ ๋ช ์นญ ์์ฒด๋ ์ธ์์ ๋จ ํ๋๋ฟ์ธ ํค์๋์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ด ํ๋๋ฟ์ธ ๋จ์ด๋ฅผ ์ด๊ณณ์ ๊ณณ์์ ์ฌ์ฉํ๊ณ ์๋ ๊ฒ์ ๋๋ค.
ํ๋๋ฟ์ธ ๋จ์ด๋ฅผ ์๋ก ๋น๊ตํ๋ ค๊ณ ํ๋๊น ๋น์ฐํ ์์ ํ ๊ฐ๋ค(b === c)๊ณ ๋ณผ ์ ๋ฐ์ ์์ต๋๋ค.
โถ๏ธ c = 20;
๋ค์ c ์ 20์ ํ ๋นํ๋ผ(c = 20)๊ณ ํ๋ฉด 20์ ๊ฐ์ง๊ณ c ๊ฐ ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐพ์์ ์๋์๋ false ๋์ 20์ ๋ฃ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด ๋์์ false ๋ ๊ฐ์ด 20 ์ผ๋ก ๋ณํ๋ ๊ฒ์ด ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ false ๋์ 20์ด๋ ๊ฐ์ ๋ฎ์ด์์ ๋ฒ๋ฆฌ๋ ๊ฒ์ ๋๋ค.
์ด์ b ๊ฐ ๊ฐ๋ฆฌํค๋ ๊ณณ์ ๊ฐ์ธ false ์ c ๊ฐ ๊ฐ๋ฆฌํค๋ ๊ณต๊ฐ์ ๊ฐ์ธ 20 ์ ์๋ก ์์ ํ ๋ค๋ฅธ ๊ฐ์ด ๋์์ผ๋ฏ๋ก b ์ c ๋ ๊ฐ์ง์๋ค(b !== c)๋ผ๋ ์กฐ๊ฑด์ด ์ฑ๋ฆฝํฉ๋๋ค.
๐ 2. ์ฐธ์กฐํ ๋ฐ์ดํฐ์ ์ ์
์ฐธ์กฐํ์๋ ๊ฐ์ด ์ ์ฅ๋ ์ฃผ์๊ฐ์ ํ ๋น(์ฐธ์กฐ)ํ๋ค.
์ฐธ์กฐํ์ ๋ํ์ ์ผ๋ก ๊ฐ์ฒด(Object)๊ฐ ์๊ณ ๊ทธ ํ์์ ๋ฐฐ์ด(Array), ํจ์(Function), ์ ๊ทํํ์(RegExp) ๋ฑ์ด ์์ผ๋ฉฐ, ES6์์๋ Map, Set, WeakMap, WeakSet ๋ฑ๋ ์ถ๊ฐ๋์์ต๋๋ค.
๊ธฐ๋ณธํ ํ์
๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํ๊ณ ์ฃผ์๋ฅผ ๋ณ์๋ช
๊ณผ ๋งค์นญ์ํค๋ ๊ณผ์ ์ ๋์ผํฉ๋๋ค.
๋ค์์ผ๋ก ํ ๋น๊ณผ์ ์ ํ ์ฐจ๋ก์ธ๋ฐ ํ ๋น์ ํ๋ ค๊ณ ๋ณด๋ ๊ทธ ๊ฐ์ด ๊ธฐ๋ณธํ์ด ์๋๊ณ ์ฐธ์กฐํ์ ๋๋ค.
์ฐธ์กฐํ ๋ฐ์ดํฐ๋ค์ ํ๋กํผํฐ(property)์ ๋ฐ์ดํฐ(data), ์ฆ key : value๋ก ๋ฌถ์ธ ์๋ค๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
ํ๋กํผํฐ๋ช ์ ๋ณ์์ ๋น์ทํ ์ฑ์ง์ ์ง๋๊ณ ์๊ณ ๋ณ์๋ช ๊ณผ ์ค์ ๋ฐ์ดํฐ๋ ์ฃผ์๊ฐ์ ํตํ์ฌ ์ฐ๊ฒฐ๋์ด ์๋๋ฐ ํ๋กํผํฐ์ ๋ฐ์ดํฐ ์ฌ์ด์์๋ ๊ฐ์ ๋์์ ํฉ๋๋ค.
์ฐ์ ๊ฐ ํ๋กํผํฐ๋ช
๊ณผ value ๊ฐ ๋ด๊ธธ ์ฃผ์๋ฅผ ๋งค์นญํ๊ธฐ ์ํด์ ๊ณต๊ฐ์ ์๋ก ํ๋ณดํฉ๋๋ค.
์ฌ๊ธฐ์ ์๋ก ์์๋ก 1011๋ฒ์ ๊ณต๊ฐ์ ํ๋ณดํฉ๋๋ค
์ด์ ๋ค์ ๊ฐ๊ฐ์ ์ฃผ์๊ฐ๋ง๋ค ๊ธฐ๋ณธํ ๋ฐ์ดํฐ๊ฐ์ ํ ๋นํ๊ฒ ๋ฉ๋๋ค.
1012๋ฒ์๋ 1 ์ 1013๋ฒ์๋ 'b' ๊ฐ ์ ์ฅ๋ฉ๋๋ค.
์ด์ ์์ ์ด๋๊ฐ์ ์ ์ฅ๋์ด ์์ ๊ฐ์ ์ ์ฅ ์ ๋ณด์ ์ฃผ์ ์ฆ, ์ฌ๊ธฐ์๋ 1011๋ฒ์ 413๋ฒ์ ๋งค์นญ์ํค๊ฒ ๋ฉ๋๋ค.
์ด๋ฌํ ๊ณผ์ ์ ๋ฐ์ดํฐ ๊ณต๊ฐ์ ๊ธฐ๋ณธํ ๋ฐ์ดํฐ๊ฐ ๋ด๊ธธ ๋๊น์ง ๋ฐ๋ณตํ๊ฒ ๋ฉ๋๋ค.
์ฆ, ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ธฐ๋ณธํ ๋ฐ์ดํฐ๋ค์ ์งํฉ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
โถ๏ธ var obj2 = obj;
๊ทธ๋ ๋ค๋ฉด ์ด ์ํ์์ obj2 ์ obj ๋ฅผ ํ ๋นํ๋ผ๊ณ ํ๋ฉด ์ด๋ ํ ์ผ์ด ๋ฒ์ด์ง๊น์?
414๋ฒ์ ๊ณต๊ฐ์ ํ๋ณดํ๊ณ obj2 ์ ๋งค์นญ์ํจ ๋ค์ obj ๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ๋ฐ์ดํฐ์ธ 1011๋ฒ์ด๋ผ๊ณ ํ๋ ์ฃผ์๋ฅผ obj2 ์ ํ ๋นํ๊ฒ ๋ฉ๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ก ์ฐธ์กฐ๊ฐ ์ด๋ฃจ์ด์ง๋ ํ์์ ๋๋ค.
๊ฐ์ฒด๋ ์ด๋๊ฐ์ ๋ฐ๋ก ์ ์ฅ๋์ด ์๋๋ฐ ๊ทธ๊ฐ์ฒด๊ฐ ์ ์ฅ๋ ์ฃผ์๋ง์ ๋ณต์ฌํด ์จ ๊ฒ์ ๋๋ค.
โถ๏ธ obj2.a = 10;
์ฌ๊ธฐ์ ๋น์ฐํ๊ฒ๋ obj2.a ๊ฐ์ 10์ด ๋์ค๋๋ฐ ์๋ณธ์ธ obj.a ๊ฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ก 10 ์ด ์ถ๋ ฅ๋ฉ๋๋ค.
obj2 ๊ฐ์ฒด๊ฐ obj ๊ฐ์ฒด์ ๋ค๋ฅธ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ ๊ฒ์ด ์๋๋ผ ๋ณธ๋ obj ๊ฐ ๋ฐ๋ผ๋ณด๋ ๊ฐ์ฒด๋ฅผ ํจ๊ป ๋ฐ๋ผ๋ณด๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฆ, obj === obj2 ๋ ์๋ฒฝํ ๋์ผํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค๊ณ ๋งํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ๊ฐ์ ๊ณณ์ ๋ฐ๋ผ๋ณด๊ณ ์๋ค๊ณ ํ์ฌ ํฌ์ธํฐ(pointer)๊ฐ ๊ฐ๋ค ํน์ ๊ฐ์ ํฌ์ธํฐ๋ฅผ ๋ฐ๋ผ๋ณธ๋ค๊ณ ํํํ๊ธฐ๋ ํฉ๋๋ค.
์ง๊ธ๊น์ง์ ๊ณผ์ ์ด ๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ ์ฐธ์กฐํ ๋ฐ์ดํฐ์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ด๊ณ
์ด ์๋ฆฌ๋ฅผ ์ดํดํด์ผ๋ง ์ดํ์ ์ ํ ๊ฒ ๋ ์์ ๋ณต์ฌ, ๊น์ ๋ณต์ฌ ๊ฐ๋ ๋ค์ด ๋ฑ์ฅํ๋ ์ด์ ๋ฅผ ์ดํดํ์ค ์ ์๊ฒ ๋ฉ๋๋ค.
๐ 3. ์ค์ฒฉ๋ ๊ฐ์ฒดํ์
๊ณต๊ฐ์ ํ๋ณดํ๊ณ ์ ์ธ๊ณผ์ ์ ์์์ ์ดํด๋ณธ ๊ฒ๊ณผ ๊ฐ์ด ๋์ผํฉ๋๋ค.
ํด๋น ํ์์๋ 1184๋ฒ์ ํ๋ณดํ๊ณ ํ๋ณด๋ ํด๋น ๊ณต๊ฐ์ ํ๋กํผํฐ๋ณ๋ก ์ ์ฅ๋ ๊ณต๊ฐ์ ๋ค์ ํ๋ณดํ๊ฒ ๋ฉ๋๋ค.
์์ ์ฝ๋์์๋ a ํ๋กํผํฐ ํ๋๋ฟ์ด๋ฏ๋ก 1185๋ฒ์ a ํ๋กํผํฐ๊ฐ ์ ์ฅ๋ ๊ณต๊ฐ์ผ๋ก ์ผ๋๋ก ํ๊ฒ ์ต๋๋ค.
โถ๏ธ obj.a = 'new';
๊ทธ๋ฐ๋ฐ ๋ง์ฝ ์ด ์ํฉ์์ 'new' ๋ผ๊ณ ํ๋ ๋ฌธ์์ด์ธ ๊ธฐ๋ณธํ ๋ฐ์ดํฐ๋ฅผ obj3.a ์ ํ ๋นํ๋ผ๊ณ ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
๋ฐฐ์ด ์ ๋ณด์ ์๋ ์๋ฆฌ์ ์์ ๋ฐ์ดํฐ์ธ new ๋ฌธ์ฅ์ด์ด ๋ค์ด์ด์ผ๋ก์จ 1326 ~ 1328๋ฒ๊น์ง ์ ์ฅ๋์ด ์๋ ๋ฐ์ดํฐ๋ค์ ๋งํฌ๊ฐ ์ฌ๋ผ์ง๊ณ ๋ง๋๋ค.
์ฆ, ์ฃผ์๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ ๊ณณ์ด ์ด๋์๋ ์๊ฒ ๋๊ฒ ๋๋ ๊ฒ์ ๋๋ค.
์ด๋ค์ ๊ฐ๋น์ง ์ฝ๋ ํฐ๋ผ๊ณ ๋ถ๋ฆฌ๋ ๋ฉ๋ชจ๋ฆฌ ์ฒญ์๊ธฐ์ธ ์ฒญ์ ๋์์์ ์ธ์ ๊ฐ ์ฅ๋์๋ ๋ชจ๋ฅด๊ฒ ์ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค.