Shallow Copy vs Deep Copy
Last updated
Last updated
ECMAScript์ ๋ณ์๋ '์์ ๊ฐ'๊ณผ '์ฐธ์กฐ ๊ฐ' ๋ ๊ฐ์ง ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค. ์์ ๊ฐ์ ๋จ์ํ ๋ฐ์ดํฐ์ด๋ฉฐ Undefined, Null, Boolean, ์ซ์, ๋ฌธ์์ด์ด๊ณ , ์ฐธ์กฐ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋ ๊ฐ์ฒด๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
์ฐธ์กฐ ๊ฐ์ ๋ณ์์์ ๋ค๋ฅธ ๋ณ์๋ก ๋ณต์ฌํ๊ฒ ๋๋ฉด ๊ทธ ๊ฐ์ด ๊ฐ์ฒด ์์ฒด๊ฐ ์๋๋ผ heap์ ์ ์ฅ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ด๊ธฐ๋๋ฌธ์ ํ์ชฝ์ ๋ณ๊ฒฝํ๋ฉด ๋ค๋ฅธ ์ชฝ์๋ ๋ฐ์์ด๋๋ค.
์ ๊ทธ๋ฆผ์ฒ๋ผ ๋ค๋ฅธ ๋ณ์๋ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์๋ ๊ฒ์ ์ ์ ์๋ค. ์ฆ, =
๋ฅผ ์ฌ์ฉํ ๊ฐ์ฒด ๋ณต์ฌ๋ ์ฐธ์กฐ๋ง ํ๋ ๊ฒ์ด๋ค. ์ด๋ฌํ ๋ฐฉ์์ ๊ฐ์ฒด์ ๋ถ๋ณ์ฑ์ ๊นจ๋จ๋ฆฌ๊ณ , ๋ฒ๊ทธ๋ฅผ ์ ๋ฐํ ์ ์๋ค. ์ค์ ๋ก, ์์
์ ํ๋ฉด์ ๋จ์ ๋์
์ผ๋ก ๋ณ์๋ฅผ ๋ณต์ฌํด ๋ฒ๊ทธ๊ฐ ์ ๋ฐ๋ ๊ฒฝ์ฐ๋ ์์๋ค.
shallow copy๋ ๋ง ๊ทธ๋๋ก ํ depth๋ง ๋ณต์ฌํ๋ค.
์์ ๋ณต์ฌ๋ ์๋ก์ด ๊ฐ์ฒด์ ์๋ณธ ๊ฐ์ฒด์ ํ๋กํผํฐ์ ๊ฐ์ ์ ํํ ๋ณต์ฌํ๋ ๊ฒ์ด๋ค. ๊ฐ์ด ๊ฐ์ฒด๋ผ๋ฉด ํด๋น ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ๋ณต์ฌํ๊ฒ๋๋ ๊ฒ์ด๋ค.
์๋์ ์์๋ฅผ ๋ณด๋ฉด ์ดํดํ๊ธฐ๊ฐ ๋ ์ฌ์ธ ๊ฒ์ด๋ค.
๊ฐ์ฒด์ ๊ฒฝ์ฐ ๊ฐ์ฒด์ ์ฐธ์กฐ ๊ฐ์ ๋ณต์ฌํ๊ฒ ๋๋ฏ๋ก, ๋ณต์ฌํ ๋ณ์์์ ๊ฐ์ ๋ณ๊ฒฝํด๋ ์๋ ๋ณ์๊ฐ๊น์ง ๋ณ๊ฒฝ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
_.clone()
$.extend()
๋ค์๊ณผ ๊ฐ์ด underscore.js์ _.clone()
๊ณผ jQuery์ $.extend()
๋ฅผ ์ฌ์ฉํด์๋ ์์ ๋ณต์ฌ๋ฅผ ํ ์ ์๋ค.
Deep Copy๋ ์๋ณธ ๊ฐ์ฒด๋ฅผ ์์ ํ ๋ณต์ฌํ๊ฒ ๋๋ค. Shallow Copy์์ ์ฃผ์๋ฅผ ๋ณต์ฌํ ๊ฒ ๋ํ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํด ์์ฑํ๊ฒ๋๋ค.
์ฃผ๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ด ์๋ค.
์ฌ๊ทํธ์ถ๋ก ๋ณต์ฌ
JSON
Stringily ๋ฉ์๋๋ function์ ๊ฒฝ์ฐ์ undefined๋ก ์ฒ๋ฆฌํ๋ฏ๋ก ์ฃผ์ํด์ ์ฌ์ฉํด์ผํ๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ(jQuery)