์๋ฐ์คํฌ๋ฆฝํธ์์ ์์ํ ๋ฐ์ดํฐ(number, string ,boolean ๋ฑ๋ฑ)๋ค์ ๋ชจ๋ ๋ถ๋ณ์ฑ์ ์ ์งํ๋ค.
๋ถ๋ณ์ฑ์ด๋, ๊ฐ์ด๋ ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ ์๋ฏธํ๋ค.
let a = 1
let b = a
์์ํ ๋ฐ์ดํฐ๋ค์ ๋ณต์ฌ๊ฐ ์ด๋ฃจ์ด์ง ๋ ๊ทธ ๊ฐ ์์ฒด๋ฅผ ๋ณต์ฌํด์ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ํ ๋นํ๋ค.
a -> 0x0001(๋ฉ๋ชจ๋ฆฌ์ฃผ์):1(๊ฐ)
b -> 0x0002(๋ฉ๋ชจ๋ฆฌ์ฃผ์):1(๊ฐ)
์ค๋ น b=2
๋ผ๊ณ b์ ๊ฐ์ ๋ฐ๊พธ๋๋ผ๋, a์ ๊ฐ์ ์ฌ์ ํ 1์ด๋ฉฐ,
b -> 0x0003(๋ฉ๋ชจ๋ฆฌ์ฃผ์):2(๊ฐ)์ด๋ ๊ฒ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์๋กญ๊ฒ ํ ๋น์ด ๋๋ ๊ฒ์ด๋ค. ์ฆ, ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ง๋ค ํ ๋น๋ ๊ฐ์ด ์ ๋ ๋ณํ์ง ์๋ ๋ถ๋ณ์ฑ์ด ์ ์ง๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋, ๊ฐ์ฒดํ ๋ฐ์ดํฐ๋ค์ ๋ถ๋ณ์ฑ์ ์ ์งํ์ง ์๋๋ฐ, ์๋ฅผ ๋ค์ด
let arr = [1,2,3]
let arr2= arr
arr2.push(4)
arr๋ [1,2,3,4]๊ฐ ๋์จ๋ค. arr์ ์๋ฌด๋ฐ ์์ ์ ํ์ง ์์์์๋ ๊ฐ์ด ๋ณ๊ฒฝ๋ ์ด์ ๋ ๊ฐ์ฒดํ ๋ฐ์ดํฐ๋ ๋ณต์ฌ๊ฐ ์ด๋ฃจ์ด์ง ๋, ๊ฐ์ ๋ณต์ฌํ๋ ๊ฒ์ด ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๋ณต์ฌ
ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฆฌ์กํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก state ๋ฑ์ ๊ฐ์ด ๋ณํ๋์ง ํ์ธํ, ์ค์ ๋ก ๋ณํ๋ค๋ฉด ์ฌ๋ ๋๋งํ๋ ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ค. ๋ฆฌ์กํธ ๊ธฐ์ค์ผ๋ก ๊ฐ์ด ๋ณํ๋ค
๋ผ๋ ๊ฑด, ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์ฐธ์กฐ๊ฐ์ด ๋ณํ๋๊ฐ
(์์ ๋น๊ต) ๋ผ๋ ์๋ฏธ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ฆฌ์กํธ์์ ๋ถ๋ณ์ฑ์ ์ ์งํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก๋ push/ pop
๊ฐ์ ๊ฒ๋ค์ด ์๋,object.assign/filter/reduce/map
๋ฑ์ ๋ด์ฅ ํจ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.