๐ ์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ
๐ 1. JavaScript์์ ๊ฐ์ฒด ์ธ์๋ฐฉ๋ฒ
console.log( 1===1 )์ ๊ฒฐ๊ณผ๋ฅผ ์ดํด๋ณด๋ฉด ์ฐ๋ฆฌ๊ฐ ์ ์๊ณ ์๋ ๊ฒ์ฒ๋ผ number์ ๊ฐ์ด 1๋ก ๊ฐ๊ธฐ ๋๋ฌธ์ ๊ทธ ๊ฒฐ๊ณผ ๊ฐ์ด true๋ก ๋์ค๊ฒ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๋๊ฐ์ ๋น ๊ฐ์ฒด a = { } ๊ณผ b = { } ๋ฅผ ๋น๊ตํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ๋น ๊ฐ์ฒด์ ๋น ๊ฐ์ฒด๋ฅผ ๋น๊ตํ๊ธฐ ๋๋ฌธ์ console.log( )๋ก a===b์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด true๊ฐ ๋์ฌ ๊ฒ๋ง ๊ฐ๋ค.
ํ์ง๋ง ๊ทธ ๊ฒฐ๊ณผ๋ false๊ฐ ๋๋ค๋ ์ฌ์ค์ ๋ฐ๊ฒฌํ ์ ์๋ค. ๊ฐ์ฒด์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ ๋ฐฐ์ด์ ๋น๊ตํ [ ]===[ ] ์ญ์ ๊ฒฐ๊ณผ๊ฐ์ด false๊ฐ ๋์ค๊ฒ ๋๋ค.
๋๊ฐ์ด ์๊ธด ๊ฐ์ฒด ํน์ ๋ฐฐ์ด์ ๋น๊ตํ๋๋ฐ ์ ๊ฒฐ๊ณผ๊ฐ์ด false๋ก ๋์ค๊ฒ ๋๋ ๊ฒ์ผ๊น?
JavaScript์์๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋ง๋ค ํด๋น ๊ฐ์ฒด๊ฐ ์ ์ฅ๋๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ณต๊ฐ์ ์๋ก์ด ๊ฐ๋ค์ ๋ถ์ฌํ๋ฉด์ ์์ฑํ๋ค.
์ฝ๊ฒ ๋งํด, ๋๊ฐ์ ๋น ๊ฐ์ฒด ๋๊ฐ๋ฅผ ์์ฑํ์ด๋ ๊ทธ ๊ฐ์ฒด๋ค์ ์๋ก ๋ค๋ฅธ ๊ณต๊ฐ์ ์๋ก ๋ค๋ฅธ ๊ฐ๋ค์ ๊ฐ์ง๋ฉด์ ์ ์ฅ๋์ด ์๋ ๊ฒ์ด๋ค. ๊ทธ ๊ฒฐ๊ณผ ๋๊ฐ์ ๋น ๊ฐ์ฒด๋ฅผ ๋น๊ตํ์์๋ ๊ฐ์ง ์๋ค๋ ๊ฒฐ๊ณผ๊ฐ์ด ์ถ๋ ฅ๋๋ ๊ฒ์ด๋ค. ๋ฐฐ์ด์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
JavaScript์์๋ ๋ฐฐ์ด์ ๊ฐ์ฒด๋ก ์ธ์ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด์์์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ์ด ์ถ๋ ฅ๋๊ฒ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ฐ์ฒด ์์ ์๋ ์์๋ค์ ๋น๊ตํ์ ๋๋ ์ด๋ค ๊ฒฐ๊ณผ๊ฐ์ด ์ถ๋ ฅ๋๊ฒ ๋ ๊น?
์์ ์ฝ๋์ ๋์์๋ a๊ฐ์ฒด์ b๊ฐ์ฒด๋ ์ฐ๋ฆฌ๊ฐ ๋ณด๊ธฐ์ ๋๊ฐ์ ์์๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ ๊ฐ์ฒด์ด๋ค.
ํ์ง๋ง a===b๋ฅผ ๋น๊ตํ ๊ฒฐ๊ณผ๊ฐ์ false๊ฐ ๋์ค๊ฒ ๋๊ณ a์ ์์ ์ค name์ ๊ฐ๊ณผ b์ ์์ ์ค name์ ๊ฐ์ ๋น๊ตํ๋ฉด ๊ทธ ๊ฒฐ๊ณผ๊ฐ์ true๊ฐ ๋จ์ ํ์ธํ ์ ์๋ค.
์ด๋ฌํ ๊ฒฐ๊ณผ๊ฐ ๋์ค๊ฒ ๋๋ ์ด์ ๋ ๊ฐ์ฒด ์์ ๋ค์ด๊ฐ ์๋ ๊ฐ๋ค์ ๋ณ์๋ผ๊ณ ์๊ฐํด๋ ๋ฌด๋ฐฉํ๊ธฐ ๋๋ฌธ์ด๋ค.
a๊ฐ์ฒด ์์ name์ด๋ผ๋ ๋ณ์์ "ingoo"๋ผ๋ ๋ฌธ์์ด์ ์ ์ฅํ๊ณ b๊ฐ์ฒด ์์ name์ด๋ผ๋ ๋ณ์์ "ingoo"๋ผ๋ ๋ฌธ์์ด์ ์ ์ฅํด์ ์ด ๋ ๋ฌธ์์ด "ingoo"==="ingoo"๋ฅผ ๋น๊ตํ๋ ๊ณผ์ ์ผ๋ก ์ปดํจํฐ๊ฐ ์ฒ๋ฆฌ๋ฅผ ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๊ทธ๋ ๋ค๋ฉด, JavaScript์์๋ ๊ฐ์ฒด์ ๊ฐ์ฒด๋ฅผ ๋น๊ตํ๋ ๊ณผ์ ๋ค์ ์ด๋ค์์ผ๋ก ์ฒ๋ฆฌํด์ผ๋ง ํ๋๊ฐ์ ๋ํ ์ด์๊ฐ ์กด์ฌํ๊ฒ ๋๋ค.
์ฌ๊ธฐ์ ๋ฑ์ฅํ๋ ๊ฐ๋ ์ด ๋ฐ๋ก ์์๋ณต์ฌ์ ๊น์๋ณต์ฌ์ด๋ค. ๊ฐ๋จํ๊ฒ ์์๋ณต์ฌ์ ๊น์๋ณต์ฌ์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด๋ณด๋ฉด ๊น์๋ณต์ฌ๋ ๋ณต์ฌํ ๊ฐ์ฒด ์์ ์๋ ์์๋ค์ ๋ฐ์ดํฐ๋ง์ ๋ณต์ฌํด์ ๋ค๋ฅธ ๊ฐ์ฒด ์์ ์ง์ด๋ฃ๋๋ค๋ ๊ฐ๋ ์ด๊ณ ์์๋ณต์ฌ๋ ๋ณต์ฌํ ๊ฐ์ฒด๋ฅผ ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ์ฐธ์กฐํ๋ ํํ๋ก ๋ณต์ฌ๊ฐ ์ด๋ฃจ์ด์ง๋ค๋ ๊ฐ๋ ์ด๋ค.
๐ 2. ๊น์๋ณต์ฌ์ ์ ์(Deep Copy
๊น์๋ณต์ฌ๋ ๋ณต์ฌํ ๊ฐ์ฒด ์์ ์๋ ์์๋ค์ ๋ฐ์ดํฐ๋ง์ ๋ณต์ฌํด์ ๋ค๋ฅธ ๊ฐ์ฒด ์์ ์ง์ด๋ฃ๋๋ค๋ ๊ฐ๋
๊น์๋ณต์ฌ์์ ์ฃผ์ํด์ผํ ์ ์ ๋ณต์ฌํ a๊ฐ์ฒด๋ฅผ ์ง์ด๋ฃ์ b๋ฅผ ๊ฐ์ฒด๋ก ์ ์ธํด ์ฃผ์ด์ผ ํ๋ค๋ ์ ์ด๋ค.
const b = { };๋ฅผ ์ฌ์ฉํด b๋ฅผ ๊ฐ์ฒด๋ก ์ ์ธํ๊ณ ๋ ํ์ Object.assign(b, a) ๋ฅผ ์ด์ฉํด b๊ฐ์ฒด์ a๊ฐ์ฒด ์์ ์๋ ์์๋ค๋ง์ ๋ณต์ฌํด์ ์ง์ด๋ฃ๊ฒ ๋๋ ๊ฒ์ด๋ค.
Object.assign( )์์ ์ฒซ๋ฒ์งธ ์ธ์์๋ ๋ณต์ฌํ ๊ฒ์ ์ง์ด๋ฃ์ ๊ฐ์ฒด, ๋๋ฒ์งธ ์ธ์์๋ ๋ณต์ฌํ ๊ฐ์ฒด๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
console.log( )๋ฅผ ์ฐ์ด๋ณด๋ฉด a๊ฐ์ฒด์ b๊ฐ์ฒด ๋ชจ๋ ๋๊ฐ์ด {name: "ingoo"} ํํ์ธ ๊ฒ์ ํ์ธํ ์ ์๋ค. ํ์ง๋ง a===b๋ฅผ ์ด์ฉํด์ ๋ ๊ฐ์ฒด๋ฅผ ๋น๊ตํด ๋ณธ ๊ฒฐ๊ณผ false๊ฐ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด๋ b๊ฐ a๋ฅผ ์จ์ ํ๊ฒ ์ฐธ์กฐํ๊ณ ์๋ ๊ฒ์ด ์๋ ๋จ์ํ a ์์ ์๋ ๋ฐ์ดํฐ๋ง์ ๊ธ์ด์์ b ์์ ์ง์ด๋ฃ์๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํ ์ ์๋ค. a๊ฐ์ฒด์ b๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ๋ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ๋ถ์ฌ๋์๋ ๊ฐ์ด ์ฌ์ ํ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ console.log(a===b)์ ๊ฒฐ๊ณผ๊ฐ์ด false๊ฐ ๋๋ ๊ฒ์ด๋ค.
๊น์๋ณต์ฌ๋ฅผ ํ์ฉํ๋ ์ผ์ด์ค๋ฅผ ์ดํด๋ณด๋๋กํ์.
์์ ์ฝ๋์์์ฒ๋ผ dupArr = [1, 2, 3, 1, 2]์ ์กด์ฌํ๋ ์ค๋ณต๊ฐ์ ์ ๊ฑฐํด์ ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํ๊ณ ์ถ์ ๊ฒฝ์ฐ ๊น์๋ณต์ฌ ๊ฐ๋ ์ ํ์ฉํ ์ ์๋ค.
new Set( )์ ์ด์ฉํ์ฌ ์ค๋ณต๊ฐ์ ์ ๊ฑฐํ ํ Set ๊ฐ์ฒด๋ฅผ temp ๋ณ์์ ํ ๋นํด์ค ๋ค์ temp๋ฅผ ์ถ๋ ฅํ๋ฉด {1, 2, 3}์ด ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
ํ์ง๋ง ๋๋ ๋ฐฐ์ด ํํ๋ก ๊ฒฐ๊ณผ๊ฐ์ ์ป๊ณ ์ถ์๋ฐ ์ถ๋ ฅ๋ ๊ฐ์ ๋ฐฐ์ด ํํ๊ฐ ์๋๋ค. ์ด๋ uniqueArr = [...temp] ์ ์ด์ฉํด Set ์์ ์๋ ์์๋ค๋ง์ ๊ฐ์ ธ์์ ๋ฐฐ์ด ์์ ๋ฃ๋ ๊ณผ์ ์ ์คํํด ๋ณผ ์ ์๋ค. ๊ทธ ๊ฒฐ๊ณผ uniqueArr๋ ๋ฐฐ์ด ํํ์ด๋ฉด์ 1, 2, 3์ ์์๋ก ๊ฐ์ง๊ฒ ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ฐธ๊ณ ๋ก ์ฌ๊ธฐ์ ๋ฑ์ฅํ ...temp๋ Spread ๋ฌธ๋ฒ์ธ๋ฐ ์ด์ ๊ด๋ จ๋ ์ค๋ช ์ ์๋ตํ๋๋ก ํ๊ฒ ๋ค.
์ฐธ๊ณ ) ๊น์๋ณต์ฌ๋ฅผ ํ ๋ ์๋์ ๊ฐ์ด Spread ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด ์๋ณธ๊ฐ์ฒด๋ ํผ์ํ์ง ์๋ ์ํ์์ ๋ฐ์ดํฐ๋ค๋ง์ ๋ณต์ฌํด ์ค๊ฒ ๋๋ค.
๋ ์ฌ์ง ์ด์ด์ ธ ์๋ ๊ฒ์ด๋ผ๊ณ ๋ณด๋ฉด ๋ ๊ฒ
๐ 3. ์์๋ณต์ฌ์ ์ ์(Shallow Copy)
์์๋ณต์ฌ๋ ๋ณต์ฌํ ๊ฐ์ฒด๋ฅผ ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ์ฐธ์กฐํ๋ ํํ๋ก ๋ณต์ฌ๊ฐ ์ด๋ฃจ์ด์ง๋ค๋ ๊ฐ๋
์์๋ณต์ฌ๋ ๊น์๋ณต์ฌ์์์ฒ๋ผ ๋ณต์ฌํ ๊ฐ์ฒด ์์ ์๋ ๋ฐ์ดํฐ๋ง์ ๊ธ์ด์์ ๋ค๋ฅธ ๊ฐ์ฒด ์์ ์ง์ด๋ฃ๋๋ค๋ ๊ฐ๋ ๊ณผ๋ ๋ค๋ฅธ ๊ฐ๋ ์ด๋ค.
๊น์๋ณต์ฌ์ ๋ค๋ฅด๊ฒ ์์๋ณต์ฌ๋ ์ฐธ์กฐํ๋ ํํ๋ฅผ ๋ ๊ณ ์๋ค. ๊ฐ์ฒด a์ ๋ณ์ b๊ฐ ์์ ๋ b๋ณ์์ a๊ฐ์ฒด์ ์ฃผ์๊ฐ์ ๋ถ์ฌํ๊ฒ ๋๋ฉด ํด๋น ์ฃผ์๋ a๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๊ณ b๋ณ์๋ a๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ํํ์ ๊ฐ์ฒด๊ฐ ๋๋ ๊ฒ์ด๋ค.
C์ธ์ด์์ ๋ฑ์ฅํ๋ ํฌ์ธํฐ ๊ฐ๋ ๊ณผ ์ ์ฌํ ๋ฐฉ์์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ด๋ ๊ฒ ์์ฑ๋ b๊ฐ์ฒด๋ a๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ ํํ๋ก ์กด์ฌํ๊ธฐ ๋๋ฌธ์ a๊ฐ์ฒด์ b๊ฐ์ฒด๋ฅผ ๊ฐ๋ค๊ณ ๋น๊ตํ์ ๋ true๊ฐ์ด ์ถ๋ ฅ๋๊ฒ๋๋ค.
์ด์ ์์๋ณต์ฌ๋ฅผ ํ๋ ๊ณผ์ ์ ์ฝ๋๋ฅผ ํตํด ์ดํด๋ณด์.
์์๋ณต์ฌ๋ฅผ ํ ๋ ์ฃผ์ํ ์ ์ ๋ณ์ b๋ฅผ ์ ์ธํ ์ํ์์ b์ a๊ฐ์ฒด๋ฅผ ํ ๋นํด์ผ ํ๋ค๋ ์ ์ด๋ค.
์์๋ณต์ฌ๋ ๋ณต์ฌํ ๊ฐ์ฒด์ธ a๋ฅผ b๊ฐ ์ฐธ์กฐํ๋ ๊ณผ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ๋ณ์ b์ a๊ฐ์ฒด๋ฅผ ํ ๋นํ๋ ๋ฐฉ๋ฒ์ ํตํด b๋ณ์์ a๊ฐ์ฒด์ ์ฃผ์๊ฐ์ ์ ์ฅํ๊ฒ ๋๋ค.
๊ทธ ๊ฒฐ๊ณผ b๋ณ์๋ฅผ ๋ถ๋ฌ์์ ๋ b๋ณ์๋ a๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๊ณ a๊ฐ์ฒด๋ฅผ ์จ์ ํ ์ฐธ์กฐํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด ๋ณ์ b์ a๊ฐ์ฒด๋ฅผ ํ ๋นํ ๊ฒฐ๊ณผ console.log( )๋ก ์ถ๋ ฅํด๋ณด์์ ๋ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ์ ์ถ๋ ฅํ๋ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ฟ๋ง์๋๋ผ b๋ณ์๊ฐ a๊ฐ์ฒด๋ฅผ ์จ์ ํ ์ฐธ์กฐํ๊ณ ์๊ธฐ ๋๋ฌธ์ console.log(a===b)์ ๊ฒฐ๊ณผ ์ญ์ true๋ก ๋์ค๊ฒ ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
+) ์์๋ณต์ฌ๋ ์ฐธ์กฐ์ ํํ๋ฅผ ๋ ๊ณ ์๋ ๊ฐ๋ ์ด๊ธฐ ๋๋ฌธ์ ์์ ์ฝ๋์์์ฒ๋ผ b.key = 180; ํน์ a.age = 130; ๊ณผ ๊ฐ์ด a, b ๋ ์ค ํ๋์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋๋ผ๋ ์๋ก์๊ฒ ์ํฅ์ ๋ฏธ์น๊ฒ ๋๋ค.