๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ ์ฐธ์กฐํ ๋ฐ์ดํฐ
๋ฐ์ดํฐ ํ์ ์ ์ข ๋ฅ
์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ์ดํฐ ํ์
์ ๊ธฐ๋ณธํ, ์ฐธ์กฐํ ์ด๋ ๊ฒ ํฌ๊ฒ ๋๊ฐ์ง๋ก ๋ณผ ์ ์์ต๋๋ค.
๊ธฐ๋ณธํ์ ํ ๋น์ด๋ ์ฐ์ฐ์ ๋ณต์ ๋๊ณ ์ฐธ์กฐํ์ ์ฐธ์กฐ๋ฉ๋๋ค.
์๋ฐํ ๋งํ๋ฉด ๋ ๋ชจ๋ ๋ณต์ ๋ฅผ ํ๊ธด ํ์ง๋ง, ๋ค๋ง ๊ธฐ๋ณธํ์ ๊ฐ์ด ๋ด๊ธด ์ฃผ์๊ฐ์ ๋ฐ๋ก ๋ณต์ ํ๋ ๋ฐ๋ฉด ์ฐธ์กฐํ์ ๊ฐ์ด ๋ด๊ธด ์ฃผ์๊ฐ๋ค๋ก ์ด๋ฃจ์ด์ง ๋ฌถ์์ ๊ฐ๋ฆฌํค๋ ์ฃผ์๊ฐ์ ๋ณต์ ํ๋ค๋ ์ ์ด ๋ค๋ฆ
๋๋ค.
๋ถ๋ณ๊ฐ(Immutable Value)
๊ธฐ๋ณธํ ๋ฐ์ดํฐ๋ค์ ๋ชจ๋ ๋ถ๋ณ๊ฐ(immutability
์ ๋๋๋ค.
๊ธฐ๋ณธํ์ด ๊ถ๊ธํ์๋ค๋ฉด,
let a = 'abc'; // ๋ณ์ a์ ๋ฌธ์์ด 'abc' ํ ๋น
a = a + 'def'; // ๋ณ์ a์ ๋ฌธ์์ด 'def' ์ถ๊ฐ ํ ๋น
// ๊ธฐ์กด์ a๊ฐ์ด 'abc' ์์ 'abcdef'๋ก ๋ณํ๋ ๊ฒ์ด ์๋, ๋ฌธ์์ด 'abcdef' ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋๊ณ ๊ทธ ์ฃผ์๊ฐ์ด a์ ํ ๋น๋ฉ๋๋ค.
// ์ฆ 'abc'์ 'abcdef'๋ ์ ํ ๋ค๋ฅธ ์ฃผ์๊ฐ์ ๊ฐ์ ์ง๋๊ณ ์์ต๋๋ค.
let b = 5; // ๋ณ์ b์ ์ซ์ 5 ํ ๋น. ์ผ๋จ ์ปดํจํฐ๋ ๋ฐ์ดํฐ ์์ญ์์ 5์ ๊ฐ์ ์ฐพ๊ณ , ์์ผ๋ฉด ๊ทธ์ ์์ผ ์๋ก ๊ณต๊ฐ์ ํ ๋นํด ์ ์ฅ์ํต๋๋ค.
let c = 5; // ๋ณ์ b์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ซ์ 5๋ฅผ ํ ๋นํ๋ ค๊ณ ํ๋ฉด ์ปดํจํฐ๋ ๊ธฐ์กด ๋ฐ์ดํฐ ์์ญ์์ ์ซ์ ๊ฐ์ ๋จผ์ ์ฐพ๊ธฐ์ ๊ทธ ์ฃผ์๊ฐ์ ์ฌํ์ฉํฉ๋๋ค.
b = 7;
์ปดํจํฐ๋ ๋ณ์์ ๊ฐ์ ์ ์ฅํ ๋ ํด๋น ๋ณ์์ ๊ฐ์ ์ง์ ์ ์ฅํ์ง ์์ต๋๋ค. ๊ฐ์ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์, ์ผ์ข
์ ๋ฐ์ดํฐ ์์ญ์ ์ ์ฅ์ด ๋ฉ๋๋ค.
๊ทธ๋ผ ๋ณ์์ ๋ฌด์์ด ์ ์ฅ๋ ๊น์?
๊ฐ์ด ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๊ฐ์ด ์ ์ฅ๋ฉ๋๋ค. ์ฆ, ๋ณ์์ ์ค์ ๋ฐ์ดํฐ์ ์ฃผ์๊ฐ์ด ์ ์ฅ๋์ด์๊ณ , ์ค์ ๋ฐ์ดํฐ์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ ๋ค๋ฅธ ์ฃผ์์ ์ ์ฅ์ด ๋์ด์์ต๋๋ค. ๋ณ์์ ์ง์ ๊ฐ์ ์
๋ ฅํ๋ฉด ๋์ง ์ ๊ท์ฐฎ๊ฒ ๋ ๊ณผ์ ์ผ๋ก ๋๋ ์ ๋ณ์ ๊ฐ์ ์ ์ฅํ ๊น์?
๋ฐ์ดํฐ ๋ณํ๊ณผ, ๋ฉ๋ชจ๋ฆฌ์ ํจ์จ ๋๋ฌธ์ ๊ทธ๋ ์ต๋๋ค.
์ฌ์ฉ์๊ฐ ์ธ์ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ ์ ์๊ธฐ์ ์ปดํจํฐ๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ๋ค์ ์ ์ฅํด์ ์์๋๋ค๊ฐ ๋ณ์๊ฐ์ด ๋ณํ๋๋ฉด ํด๋น ๋ณ์์ ๋ฐ์ดํฐ ์ฃผ์๊ฐ๋ง ๋ฐ๊ฟ์ฃผ๋ ๊ฒ์ด์ฃ .
๋ํ ๋ณ์์ ๋ฐ์ดํฐ ๊ฐ์ด '์ง์ ' ์ ์ฅ๋์ด ์๋ค๋ฉด ํด๋น ๊ฐ์ ์ญ์ ํ ํ ๋ค์ ์๋ก์ด ๊ฐ์ ์ ์ฅํ๋ ์ผ๋ จ์ ์์
๋ค์ด ํ์ํ๊ธฐ์ ์ปดํจํฐ์๊ฒ ๋ ๋ถ๋ด์ด ๊ฐ ๊ฒ์
๋๋ค.
๊ทธ๋ผ ๋ณ์์ ์ฃผ์๊ฐ์ด ํ ๋น๋์ง ์์, ์ฆ ์ฐ์ด์ง ์๋ ๋ฐ์ดํฐ ๊ฐ๋ค์ ์ด๋ป๊ฒ ๋ ๊น์? JavaScript๋ '๊ฐ๋น์ง ์ปฌ๋ ํฐ(garbage collector)'
๋ฅผ ๋ด์ฅํ๊ณ ์์ด ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ๋๋ฏธ ๋ฐ์ดํฐ๋ค์ ์์์ ํฌ์งํด์ ์ญ์ ํด์ฃผ์ด ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ํ๋ณดํฉ๋๋ค.
์ด์ฒ๋ผ ํ๋ฒ ๋ง๋ค์ด์ง ๊ฐ์ด ๋ณํ์ง๋ ์๊ณ , ๊ฐ๋น์ง ์ปฌ๋ ํ
์ ๋นํ์ง ์๋ ํ ์ญ์ ๋์ง์๋ ๊ฐ์ด ๋ถ๋ณ๊ฐ
์
๋๋ค.
๊ฐ๋ณ๊ฐ(mutable value)
๋ถ๋ณ๊ฐ๊ณผ ๋ฐ๋๋ก ๊ฐ๋ณ๊ฐ์ ์์ ๋ฐ์ดํฐ ํ์ (Primitive Type)์ด ์๋ ์ฐธ์กฐ ํ ์ดํฐ ํ์ (Reference Type)์์ ์ฐพ์๋ณผ ์ ์์ต๋๋ค. ์ฐธ์กฐ ํ์ ์ ๊ฒฝ์ฐ ์์ํ์ ๊ณผ ๋ค๋ฅด๊ฒ ๋ฉ๋ชจ๋ฆฌ ์์์๋ ์๋์ ์ฝ๋๋ฅผ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ์ ์ฅ์ ํ๊ณ ์์ต๋๋ค.
let obj1 = {
a: 1,
b: 'bbb'
};
obj1 ์ Object ํ์
์ผ๋ก ์ฐธ์กฐ ํ์
์
๋๋ค. ํด๋น ๋ณ์๋ 1002 ์ฃผ์์ ๋ณ์ ์์ญ์ ์ ์ฅ๋๊ณ ๋ฐ์ดํฐ ์์ญ์๋ ์์ํ์
๊ณผ ๋ค๋ฅด๊ฒ Object๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด์ ๋ณ์(ํ๋กํผํฐ)
์ ๊ธธ์ด๋งํผ ํ๋กํผํฐ ๋ณ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์์ญ์ ์ ๋ณด๊ฐ ์ ์ฅ๋์ด ์์ต๋๋ค. ์ด ํ๋กํผํฐ๋ ๋ค์ ๊ฐ ๊ฐ์ ๋ฐ์ดํฐ ์์ญ์์ ๊ฐ์ ํ ๋นํ๊ณ ์ฃผ์ ๊ฐ์ ์ ์ฅํ๋๋ฐ ์ฌ๊ธฐ์ ํ๋กํผํฐ์ ๊ฐ์ ๋ณ๊ฒฝํ๊ณ ์ ํ์ ๋ obj1 ์ ๋ฐ์ดํฐ ์ฐธ์กฐ 5001 ๋ฒ์ง์ ์ฃผ์๊ฐ์ ๋ถ๋ณํ์ง๋ง ๊ฐ์ฒด ๋ณ์์ a ํ๋กํผํฐ์ ๊ฐ์ด๋ b ์ ๊ฐ์ ๋ณ๊ฒฝ์ ๋ฐ์ดํฐ ์ฃผ์๊ฐ ๋ณ๊ฒฝ์ด ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ณํ๋คํด์ ๊ฐ๋ณ๊ฐ์ด๋ผ ๋ถ๋ฆฝ๋๋ค.
๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ
์ฐธ์กฐํ ๋ฐ์ดํฐ๋ ๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ์ดํฐ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ ค๊ณ ํ๋ค๋ฉด ๋ฐ์ดํฐ๋ ๋ณํ์ง ์์ต๋๋ค.
ํ์ง๋ง ์ฐธ์กฐํ ๋ฐ์ดํฐ๊ฐ ๊ฐ๋ณ์ ์ด๋ค๋ผ๊ณ ๋งํ๋ ๊ฒ์, ๋ด๋ถ ํ๋กํผํฐ(๊ฐ์ฒด์ ๋ณ์)๋ฅผ ๋ณ๊ฒฝํ ๋๋ฅผ ๋งํฉ๋๋ค.
๋ง์ฝ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํด์, ๋ด๋ถ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ์ ๋, ๋ณต์ฌํ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ๋๋ผ๋, ์๋ณธ ๊ฐ์ฒด๊ฐ ๋ณํ์ง ์์์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ๊ฒ์
๋๋ค.
๋ณต์ฌ ๊ฐ๋ง ๋ณ๊ฒฝํ๋ฉด๋์ง ์๋ณธ ๊ฐ์ ๊ฑด๋๋ฆฐ๋ค๋ฉด, ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ๋ ์ด๊ธ๋๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด๋ฐ ๋ '๋ถ๋ณ ๊ฐ์ฒด'๊ฐ ํ์ํฉ๋๋ค.
๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ํ์ฉํ ์ ์์ต๋๋ค.
๋ด๋ถ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ ๋๋ง๋ค ๋งค๋ฒ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ฌํ ๋นํ๊ธฐ๋ก ๊ท์น์ ์ ํ๊ฑฐ๋ ์๋์ผ๋ก ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋๊ตฌ๋ฅผ ํ์ฉํ๋ค๋ฉด ๋ถ๋ณ์ฑ์ ํ๋ณดํ ์ ์์ต๋๋ค. ํน์ ๋ถ๋ณ์ฑ์ ํ๋ณดํ ํ์๊ฐ ์์ ๊ฒฝ์ฐ์๋ ๋ถ๋ณ ๊ฐ์ฒด๋ก ์ทจ๊ธํ๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ๊ธฐ์กด ๋ฐฉ์๋๋ก ์ฌ์ฉํ๋ ์์ผ๋ก ์ํฉ์ ๋ฐ๋ผ ๋์ฒํด๋ ๋ฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ์ด๋ป๊ฒ ๋ง๋ค ์ ์๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
let user = {
name: "Eun",
gender: "male"
};
function changeName(user, newName) {
let newUser = user;
newUser.name = newName;
return newUser;
}
let user2 = changeName(user, "Namgung");
if (user !== user2) {
console.log("์ ์ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.");
}
console.log(user.name, user2.name); // Numgung, Namgung
console.log(user === user2); // true
๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ , ๊ฐ์ฒด์ ๊ฐ๋ณ์ฑ์ผ๋ก ์ธํด ์ด๋ค ๋ฌธ์ ๊ฐ ๋ํ๋ ์ ์์์ง ์์๋ณด๊ฒ ์ต๋๋ค.
์ฒซ ๋ฒ์งธ ์ค์์ user ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ user ๊ฐ์ฒด์ name ํ๋กํผํฐ๋ฅผ 'Namgung'์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ํจ์๋ฅผ ํธ์ถํด์, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ user2 ๋ณ์์ ํ ๋นํ์ต๋๋ค.
์ด๋ user, user2 ๋ณ์ ๋ชจ๋ name ํ๋กํผํฐ๊ฐ 'Namgung'์ผ๋ก ์ถ๋ ฅ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๋ง์ง๋ง ์ค์์๋ user์ user2๊ฐ ์๋ก ๋์ผํ๋ค๊ณ ๋์ต๋๋ค. ๋ง์ฝ user2์ user๊ฐ ํ๋กํผํฐ๊ฐ ๋ฐ๋๋๋ผ๋, ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ๋๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์?
let user = {
name: "Eun",
gender: "male"
};
function changeName(user, newName) {
return {
name: newName,
gender: user.gender
};
}
let user2 = changeName(user, "Namgung");
if (user !== user2) {
console.log("์ ์ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.");
}
console.log(user.name, user2.name); // Eun Namgung
console.log(user === user2); // false
์ฒซ ๋ฒ์งธ๋ changeName ํจ์๊ฐ ์ ๋ง ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋๋ก ์์ ํ์ต๋๋ค. ์ด๋ ๊ฒ ๋๋ค๋ฉด, user์ user2๋ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด์ด๋ฏ๋ก ์์ ํ๊ฒ ๋ณ๊ฒฝ ์ ๊ณผ ํ๋ฅผ ๋น๊ตํ ์ ์์ต๋๋ค. ํ์ง๋ง ๋ฌธ์ ์ ์ด ์์ต๋๋ค. changeName ํจ์๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ฉด์ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ ๊ธฐ์กด ๊ฐ์ฒด์ ํ๋กํผํฐ(gender)๋ฅผ ํ๋์ฝ๋ฉ์ผ๋ก ์ ๋ ฅํ์ต๋๋ค. ์ง๊ธ์ gender ํ๋กํผํฐ๊ฐ ํ๋ ์์ด์ ์ฌ์ ์ ์ ์์ง๋ง, ๋ง์ฝ ํ๋กํผํฐ๊ฐ ๋ง์ ๊ฐ์ฒด์๋ค๋ฉด, ํ๋์ฝ๋ฉ์ ์์ด ๋์ฑ ๋ง์์ง ๊ฒ์ ๋๋ค. ์ด๋ฐ ๋ฐฉ์๋ณด๋ค๋ ๋์ ๊ฐ์ฒด์ ํ๋กํผํฐ ๊ฐ์์ ์๊ด์์ด ๋ชจ๋ ํ๋กํผํฐ๋ฅผ ๋ณต์ฌํ๋ ํจ์๋ฅผ ๋ง๋๋ ํธ์ด ๋ ์ข์ ๊ฒ์ ๋๋ค.
let user = {
name: "Eun",
gender: "male"
};
function copyObject(target) {
let result = {};
for(let prop in target) {
result[prop] = target[prop];
}
return result;
}
let user2 = copyObject(user);
user2.name = 'Namgung';
if (user !== user2) {
console.log("์ ์ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.");
}
console.log(user.name, user2.name); // Eun Namgung
console.log(user === user2); // false
์์์ copyObject ํจ์๋ฅผ ๋ง๋ค์์ต๋๋ค. copyObject ํจ์๋ for in ๋ฌธ๋ฒ์ ์ด์ฉํด result ๊ฐ์ฒด์ target ๊ฐ์ฒด์ ํ๋กํผํฐ๋ค์ ๋ณต์ฌํ๋ ํจ์์
๋๋ค. copyObject ํจ์๋ฅผ ํ์ฉํด์ ๊ฐ๋จํ๊ฒ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ๊ณ ๋ด์ฉ์ ์์ ํ๋ ๋ฐ ์ฑ๊ณตํ์ต๋๋ค.
copyObject ํจ์๋ ํ๋กํ ํ์
์ฒด์ด๋ ์์ ๋ชจ๋ ํ๋กํผํฐ๋ฅผ ๋ณต์ฌํ๋ ์ , getter/setter๋ ๋ณต์ฌํ์ง ์๋ ์ , ์์ ๋ณต์ฌ๋ง์ ์ํํ๋ค๋ ์ ์์ ์์ฝ์ง๋ง, ๋ฌธ์ ๋ฅผ ๋ชจ๋ ๋ณด์ํ๋ ค๋ฉด ํจ์๊ฐ ๋ฌด๊ฑฐ์์ง ์๋ฐ์ ์์ต๋๋ค. user ๊ฐ์ฒด์ ๋ํด์๋ ๋ฌธ์ ๊ฐ ๋์ง ์์ผ๋ฏ๋ก ์ผ๋จ ์งํํด๋ณด๊ฒ ์ต๋๋ค.
copyObject ํจ์๋ฅผ ํ์ฉํด์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์์ ๋, ๊ฐ์ฅ ์์ฌ์ด ์ ์ ์ด ํจ์๋ '์์ ๋ณต์ฌ๋ง์ ์ํํ๋ค'๋ ์ ์
๋๋ค.
์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ
์์ ๋ณต์ฌ
์์ ๋ณต์ฌ๋ ์ฐธ์กฐํ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ํ๋กํผํฐ๋ฅผ ๋ณต์ฌํ ๋ ๊ทธ ์ฃผ์๊ฐ๋ง ๋ณต์ฌํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์์์ copyObject ํจ์๋ ์์ ๋ณต์ฌ๋ง ์ํํ์ต๋๋ค. copyObject๋ ํด๋น ํ๋กํผํฐ์ ๋ํด ์๋ณธ๊ณผ ์ฌ๋ณธ์ด ๋ชจ๋ ๋์ผํ ์ฐธ์กฐํ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋ฉ๋๋ค.
์์ ๋ณต์ฌ์ ๋ํด ์๋ฅผ ๋ค์ด ์ดํด๋ณด๊ฒ ์ต๋๋ค.
const obj = { vaule: 1 }
const newObj = obj;
newObj.vaule = 2;
console.log(obj.vaule); // 2
console.log(obj === newObj); // true
obj ๋ณ์์ object๋ฅผ ํ ๋นํ๊ณ , newObj ๋ณ์์ obj ๋ณ์์ ๊ฐ์ ํ ๋นํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ newObj ํ๋กํผํฐ์ธ value ๊ฐ์ 2๋ก ์ค์ ํ๊ณ , obj.value๋ฅผ ์ฝ์์ ์ถ๋ ฅํ๋ฉด, 2๋ก ๋ณ๊ฒฝ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์๋๋ฉด, ์์ ๋ณต์ฌ ๋๋ฌธ์, ์ฌ๋ณธ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋๋ผ๋, ๋์ผํ ์ฐธ์กฐํ ๋ฐ์ดํฐ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๊ธฐ์, ์๋ณธ์ ๋ฐ์ดํฐ๋ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด, ๊น์ ๋ณต์ฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? ์ด์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๊น์ ๋ณต์ฌ
๊น์ ๋ณต์ฌ๋ ๋ด๋ถ์ ๋ชจ๋ ๊ฐ๋ค์ ํ๋ํ๋ ์ฐพ์์ ์ ๋ถ ๋ณต์ฌํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๊น์ ๋ณต์ฌ์ ๋ํด ์๋ฅผ ๋ค์ด ์ดํด๋ณด๊ฒ ์ต๋๋ค.
let a = 1;
let b = a;
b = 2;
console.log(a); // 1
console.log(b); // 2
console.log(a === b); // false
๋ง์ฝ ๋ณ์ a์ ๊ฐ์ผ๋ก 1์ ํ ๋นํ๊ณ , ๋ณ์ b์ a๋ฅผ ํ ๋นํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ณ์ b์ 2๋ฅผ ์ฌํ ๋นํ๊ณ , a์ b๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด, a๋ 1, b๋ 2๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์ ์์ ํ์ ์ ๊น์ ๋ณต์ฌ๊ฐ ์งํ๋ฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด, ์์ ํ์ ์ด ์๋, ๊ฐ์ฒด์์ ๊น์ ๋ณต์ฌ๋ ์ด๋ป๊ฒ ์ด๋ค์ง๋์ง ์์๋ณด๊ฒ ์ต๋๋ค. ๊ฐ์ฒด์ ๊น์ ๋ณต์ฌ์๋ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
Reference
์ข์ ์ฑ ์จ์ฃผ์ ์ ์ฌ๋จ ๊ฐ๋ฐ์๋๊ป ํญ์ ๊ฐ์ฌ๋๋ฆฌ๋ฉฐ..
'๐ฅ Front-End > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] ํด๋ก์ (Closure) (0) | 2022.07.21 |
---|---|
[JS] ์ค์ฝํ(Scope) (0) | 2022.07.21 |
[JS] JavaScript์ ์๋ฃํ๊ณผ JavaScript๋ง์ ํน์ฑ (0) | 2022.07.19 |
[JS] JavaScript์ append๋ฅผ ์ด์ฉํ HTML ์์ ์์ฑํ๊ธฐ (0) | 2022.05.15 |
[JS] 10. setTimeout & setInterval & requestAnimationFrame (0) | 2022.04.20 |