๊ฐ์ฒด์ ๊น์ ๋ณต์ฌ vs ์์ ๋ณต์ฌ
์ค๋ ์ด ๊ธ์ ์ฐ๋ ์ด์ ๋,
function applyCoupon(cart, coupon) {
cart.items.forEach((item) => {
item.price -= coupon.discount;
});
}
const userACart = {
items: [
{ name: "ํค๋ณด๋", price: 30000 },
{ name: "๋ง์ฐ์ค", price: 20000 },
],
};
const userBCart = userACart;
const coupon = { discount: 5000 };
applyCoupon(userBCart, coupon);
userACart์ userBCart๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ์์ ํด์ผ ํ๋๊ฐ.
๊ทธ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์ ๋ํ ์ง๋ฌธ์ ์์ ์๊ฒ ๋๋ตํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ผ๋จ userACart์ userBCart๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ์ง ์๋ ์ด์ ๋ถํฐ ๋ณด์๋ฉด,
userBCart์ userACart๋ฅผ ํ ๋นํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฆ, userACart๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ userBCart๊ฐ ๊ทธ๋๋ก ์ฐธ์กฐํ์ฌ ์ฐธ์กฐ๊ฐ์ด ๋ณํ๋ฉด์ ๋ ๋ณ์ ๋ชจ๋ ์ํฅ์ ๋ฐ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ ํด๋น ์ฝ๋๋ฅผ ์์ ํ๊ธฐ ์ํด์ userBCart์ userACart๋ฅผ ๊น์ ๋ณต์ฌํ์ฌ ํ ๋นํด์ผ ํ๋ค.
๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ์ ๊น์ ๋ณต์ฌ๋ฅผ ํด์ผํ๋๋๋ผ๋ ์ง๋ฌธ์ ๋ฐ์์ ๋, ์๊ฐ ๋จธ๋ฆฟ์์ด ํ์์ก๋ค.
์์ ๋ณต์ฌ๋ { ...userACart } ์ด๋ ๊ฒ ์คํ๋ ๋๋ก ํ์ด์ ์ฐ๋ฉด ๋ผ !
๊น์ ๋ณต์ฌ๋ ์ฌ๊ท ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ผ !
์๊ฐํด๋ณด๋ ๋ด๊ฐ ์๋ ๊ฑด ์ฌ๊ธฐ๊น์ง์๋ค.
์์ ๋ณต์ฌ๋ ์ธ์ ์ฌ์ฉํด๋ ๋๊ณ , ๊น์ ๋ณต์ฌ๋ ์ธ์ ์ฌ์ฉํด๋ ๋๋์ง์ ๋ํด ์ ์ธ์งํ์ง ๋ชป ํ๋ค.
๊ทธ๋์ ์ด ๊ธ์ ์ฐ๋ฉด์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
1. ์์ ๋ณต์ฌ
- ์์ ๋ณต์ฌ๋ ์ต์์ ๊ฐ์ฒด์ ์์ฑ ๊ฐ๋ค๋ง ๋ณต์ฌํ๋ค.
- ๊ฐ์ฒด ์์ฑ ์ค ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด ๊ฐ์ ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ ๋ณต์ฌ๋์ง ์๊ณ ์๋์ ์ฐธ์กฐ๋ฅผ ์ ์งํ๋ค.
์์ ์ฝ๋์์ ์์ ๋ณต์ฌ๋ฅผ ํ๋ฉด ์ ๋๋ ์ด์ ๋ (์ฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ ์ดํด๋ฅผ ์ฝ๊ฒํ๊ธฐ ์ํด ์์๋ก ์ ํ ๊ฐ)
1. userACart๋ @7001 ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ค.
2. userACart๋ฅผ ์์ ๋ณต์ฌํ์ฌ userBCart์ ํ ๋นํ๋ค๋ฉด, userBCart๋ @7002 ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ค.
3. userACart (@7001) ๋ด๋ถ์ items๋ ๋ฐฐ์ด ์ฆ ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ก @8001 ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ค.
4. ์์ ๋ณต์ฌ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ userBCart (@7002) ๋ด๋ถ์ items๋ ๊ทธ๋๋ก @8001 ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ค.
๋ฐ๋ผ์ ์๋ก ๋ค๋ฅธ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋๋ผ๋, ๋ด๋ถ ์ฐธ์กฐํ ๋ฐ์ดํฐ (items)๊ฐ ์ฌ์ ํ @8001 ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ๋ ๊ฐ์ฒด๊ฐ ์ํฅ์ ๋ฐ๋๋ค.
๊ทธ๋ผ ์์ ๋ณต์ฌ๋ ์ธ์ ํ๋ฉด ์ข์๊น?
๊ฐ์ฒด์ ์ต์์ ์์ฑ ๊ฐ์ ๋จ์ํ ์ฝ๊ธฐ๋ง ํ๋ค๊ฑฐ๋ ์ต์์ ๊ฐ์ฒด์ ์๋ก์ด ์์ฑ์ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ์ด๋ค.
// ์์ ์์๋ฅผ ๊ทธ๋๋ก ์ด์ด๋ฐ์ userBCart์๋ง ์๋ก์ด property๋ฅผ ์ถ๊ฐํ๋ค.
userBCart.userName = "Dana";
console.log(userACart);
// {items: [ { name: 'ํค๋ณด๋', price: 25000 }, { name: '๋ง์ฐ์ค', price: 15000 } ]}
console.log(userBCart);
// {items: [ { name: 'ํค๋ณด๋', price: 25000 }, { name: '๋ง์ฐ์ค', price: 15000 } ],userName : 'Dana'}
userBCart์๋ง { userName : 'Dana' }๊ฐ ์ถ๊ฐ๋์๋ค.
ํด๋น ํ๋กํผํฐ๋ @7002๋ฉ๋ชจ๋ฆฌ ๋ด๋ถ์๋ง ๋ค์ด์๊ธฐ ๋๋ฌธ์ด๋ค.
2. ๊น์ ๋ณต์ฌ
- ๊น์ ๋ณต์ฌ๋ ๊ฐ์ฒด ๋ด ๋ชจ๋ ๊ณ์ธต์ ์กด์ฌํ๋ ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ณต์ฌํ์ฌ ์์ ํ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํ ๋นํ๋ค.
- ์ฆ ์๋ก ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ฏ๋ก ๋ ๋ฆฝ์ ์ผ๋ก ๋์์ด ๊ฐ๋ฅํ๋ค.
๋๋ ์์ ๋ฌธ์ ์์ ๋ ๋ณ์๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๊ธฐ ์ํด userBCart๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ค.
const userBCart = {
items : userACart.items.map((item) => {
return {...item}
})
};
items๊น์ง ์ง์ ๋ค์ด๊ฐ๊ณ map์ด ์๋ก์ด ๋ฐฐ์ด์ ๋ฑ์ด๋ด๋ ์ ์ ์ด์ฉํ์ฌ
items ๋ด๋ถ์ { name : ... , price : ..} ๊ฐ์ฒด๋ฅผ ์คํ๋ ๋๋ฅผ ํตํด ์์ ๋ณต์ฌํ์๋ค.
์ฌ๊ธฐ์ ๊ฐ์ฒด๋ค์ ์์ ๋ณต์ฌ๋ฅผ ํ ์ ์์๋ ์ด์ ๋
๊ฐ์ฒด ๋ด๋ถ์ ๊ฐ๋ค์ด ๋ชจ๋ ๊ฐ์ ์ฐธ์กฐํ์ง ์๊ณ ์ง์ ์ ์ฅํ๋ ์์ ํ์ ์ ๋ฐ์ดํฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ๋ฌธ์ ์์๋ ํด๋น ์ฝ๋๋ก๋ ํด๊ฒฐ์ด ๋์์ง๋ง
๋ง์ฝ ๊ฐ์ฒด ๋ด๋ถ์ ๋ ๋ค๋ฅธ ์ค์ฒฉ ๊ฐ์ฒด๊ฐ ์๋ค๋ฉด ๋ ๋ณ์๋ ์ ์ฝ๋๋ก๋ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ ์ ์๋ค๋ ์ ์ ์ฐธ๊ณ ํด ๋์.