๋ถ๋ณ ๊ฐ์ฒด
- ์ฐธ์กฐํ์ ๊ฐ๋ณ์ ๋ฐ์ดํฐ ์์ฒด๊ฐ ์๋, ๋ด๋ถ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ ๋๋ง ์ฑ๋ฆฝํ๋ค.
- ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ผ๋ก๋ง ๊ฐ๋ฅํ๋ค. ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ์๋ค.
- ๊ฐ์ฒด๊ฐ ๋ถ๋ณ์ฑ์ ๊ฐ์ง๊ณ ์ ํ๋ค๋ฉด, ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ค๊ณ ํ ๋ ๋ง๋ค ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด๋ด์ผ ํ๋ค.
๋ถ๋ณ ๊ฐ์ฒด๊ฐ ํ์ํ ์ํฉ
- changeName ํจ์๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ๋ฐํํ์ง ์๋๋ค.
๊ทธ์ , newUser๋ผ๋ ๋ณ์๋ฅผ ์๋ก ๋ง๋ค์ด์, ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ๊ฐ์ฒด์ ์ฃผ์๋ฅผ newUser์ ๋ฃ๊ณ , ํ๋กํผํฐ name์ ์ฐธ์กฐํด์ ๊ฐ์ newName์ ๊ฐ์ผ๋ก ๋ฐ๊ฟ ๋ฟ์ด๋ค. - ๊ทธ๋ ๋ค๋ณด๋, user2์ user์ ๊ฐ์ ๊ฐ์ ์ ๋ฐ์ ์๊ณ , ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ false๊ฐ ๋์จ ๊ฒ์ด๋ค.
๋ถ๋ณ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ 1 : ์์ ๋ณต์ฌ
- ๊ฐ์ฒด๊ฐ ๊ฐ์ง ๋ชจ๋ ํ๋กํผํฐ๋ฅผ ๋ณต์ฌํ๋ ํจ์๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉํ๋ฉด ๋๋ค.
์์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ๋ฌธ์ ์
1. ์ค์ํ๊ธฐ ์ฝ๋ค.
- ์ค์๋ก copyObject๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํด๋ฒ๋ฆฐ๋ค๋ฉด, ๊ฐ์ฒด์ ๋ถ๋ณ์ฑ์ ๊นจ์ ธ๋ฒ๋ฆฐ๋ค.
- ํ๋กํผํฐ ๋ณ๊ฒฝ ์์ฒด๋ฅผ ๋ง์์ผ ๋ถ๋ณ์ฑ์ ๋ณด์ฅํ ์ ์๋ค. ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์กด์ฌํ๋๋ฐ, ๋ํ์ ์ผ๋ก immutable.js์ baobab.js๊ฐ ์๋ค.
2. ํ๋กํผํฐ๊ฐ ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ, ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ , ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๊ฒ ๋๋ค.
- ์์ ๋ณต์ฌ๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌํ๋ฏ๋ก, ํ๋กํผํฐ๊ฐ ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ, ์ฃผ์๊ฐ๋ง ๋ณต์ฌํด๊ฐ๋ค.
- ์ฃผ์๊ฐ์ด ์๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ๋ณต์ฌํด๊ฐ๋ ๋ฐฉ์์ ๊น์ ๋ณต์ฌ๋ผ๊ณ ๋ถ๋ฅธ๋ค
๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ 2 : ๊น์ ๋ณต์ฌ
- ๊ฐ์ฒด๋ฅผ ์์ ํ ๋ณต์ฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ํ๋กํผํฐ๊ฐ ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ, ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ๋ณต์ฌํ๋ค.
์ด๋ ์ฌ๊ท์ ์ผ๋ก ํํด์ง๋ค.
๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ 3 : JSON.stringify ํ์ฉ
- JSON.stringify๋ก ๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ๋ง๋ ๋ค์, parse๋ก ๋ค์ ๊ฐ์ฒด๋ก ๋ง๋ค๋ฉด, ์์ ํ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ ์ ์ด์ฉํ ๊น์ ๋ณต์ฌ์ด๋ค.
- ๋จ, ์ด ๋ฐฉ๋ฒ์ JSON์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ ๋ฉ์๋๋ ์จ๊ฒจ์ง ํ๋กํผํฐ์ธ
__proto__, getter/setter๋ฑ์ ๋ฌด์ํ๋ค. - ๋ฐ๋ผ์, ์ด ๋ฐฉ๋ฒ์ ์์ ๋ฐ์ดํฐ์ ๋ํ ๊น์ ๋ณต์ฌ๋ฅผ ํ๋ ๊ฒฝ์ฐ์๋ง ์ ํจํ๋ค.
๋ถ๋ณ๊ฐ์ฒด ์์ฝ
- ๋ถ๋ณ๊ฐ์ฒด๋ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์๋๋ค. ๋ง์ฝ, ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด, ๋ณ๊ฒฝ๋ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. ๊ธฐ์กด ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํด์ ์๋๋ค.
- ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ, ๋ชจ๋ ํ๋กํผํฐ๋ฅผ ํ๋์ฝ๋ฉํด์ ์์ฑํด์ค๋ ๋์ง๋ง, ์์ด ๋๋ฌด ๋ง์ด ๊ฐ๋ค. ์ด ๊ฒฝ์ฐ, ๊ฐ์ฒด ๋ณต์ฌ ํจ์๋ฅผ ๋ง๋ค์ด์ ๊ฐ์ ๊ฐ์ ๊ฐ์ง๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
- ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ ๋๊ฐ์ง๋ก, ์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ๊ฐ ์๋ค. ์์ ๋ณต์ฌ๋ ํ๋กํผํฐ ๊ฐ์ ๊ทธ๋๋ก ๋ณต์ฌํ๊ธฐ ๋๋ฌธ์, ํ๋กํผํฐ ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ ์ฃผ์๋ง ๋ณต์ฌํด๋ฒ๋ ค์ ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ๊ณต์ ํด์ ์ฌ์ฉํ๋ค. ๋ฐ๋ฉด, ๊น์ ๋ณต์ฌ๋ ํ๋กํผํฐ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ ๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๊น์ง ๋ณต์ฌํ๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ์ง ์๋๋ค. ๊น์ ๋ณต์ฌ์ ํ๋กํผํฐ ๊ฐ์ฒด ๋ณต์ฌ ๊ณผ์ ์ ์ฌ๊ท์ ์ผ๋ก ๋ฐ์ํ๋ค.