์ด๋ฒ ํฌ์คํ ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ 7๊ฐ์ง ๋ฐ์ดํฐ ํ์ ์ ๋ํด ์ดํด๋ณด์! ๐๐
์๋ฐ์คํฌ๋ฆฝํธ๋ 7๊ฐ์ง์ ๋ฐ์ดํฐ ํ์ ์ ์ ๊ณตํ๊ณ ์ด๋ ํฌ๊ฒ primitive(์์) type๊ณผ object(๊ฐ์ฒด) type ๋๊ฐ์ง๋ก ๋๋ ์ ์๋ค. ์์ ํ์ ๊ณผ ๊ฐ์ฒด์ ์ฃผ๋ ์ฐจ์ด๋ mutability์ด๋ค.
๐ก ์์ ํ์ ์ ํ๋ฒ ์ ์ธ๋๋ฉด ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๊ณ , ๊ฐ์ฒด ํ์ ์ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
primitive type(์์ ํ์ )์ ํน์ง์ ์์๋ณด์.
- number, string, boolean, undefined, null, symbol type
- ํ ๋น ์ ๋ณ์์๋ ์ค์ ๊ฐ(value)์ด ์ ์ฅ๋๋ค.
- ๋ค๋ฅธ ๋ณ์์ ํ ๋น ์ '๊ฐ'์ด ๋ณต์ฌ๋์ด ์ ๋ฌ๋๋ค. (pass by value)
- ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฐ์ด๋ค. ์์ ์ ํ๋ฉด ์๋ก์ด ์ฃผ์์ ๊ฐ์ด ํ ๋น๋๋ค.
let str1 = 'hello';
str1 = 'world';
์์ ์ธ๊ธ ํ๋ฏ์ด objectํ์ ๊ณผ primitive type์ ๋๋๋ ์ฃผ๋ ๊ธฐ์ค์ ์์ ๊ฐ๋ฅ ์ฌ๋ถ์ด๋ค.
์์ ์ฝ๋์ ๊ฐ์ด ๊ธฐ์กด์ str1๊ฐ ๋ณ๊ฒฝ ์ ๊ธฐ์กด์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์ ๊ทผํด ํด๋น value๋ฅผ ์์ ํ๋ ๊ฒ์ด ์๋๋ผ, ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ 'world'๋ผ๋ ๋ฌธ์์ด์ ํ ๋นํ๊ณ str1์ ํด๋น ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํ ๋นํ๊ฒ ๋๋ค.
let str2 = 'original string';
str2[2] = 'B';
console.log(str2); // original string ์ถ๋ ฅ
primitive type ํ์์ ๋ณ์ ๊ฐ ๋ณ๊ฒฝ ์๋ ์ ์๋ฌ๋ฅผ ๋ฐ์์ํค์ง๋ ์์ง๋ง, ์์ ์ฌํญ์ด ๋ฐ์๋์ง ์๋๋ค.
- ๊ฐ์ฒด, ํจ์ ๋ฐฐ์ด ๋ฑ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฑฐ์ ๋ชจ๋ ๊ฒ์ด ๊ฐ์ฒด์ด๋ค.
- ํ ๋น ์ ๋ณ์์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(์ฐธ์กฐ๊ฐ)์ด ์ ์ฅ๋๋ค.
- ๋ค๋ฅธ ๋ณ์์ ํ ๋น ์ '์ฐธ์กฐ'๊ฐ์ด ํ ๋น๋์ด ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ๊ฒ ๋๋ค.
- ์์ ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ property๋ฅผ ๋์ ์ผ๋ก ์ถ๊ฐํ๋ ๊ฒ๋, ์ญ์ ํ๋๊ฒ๋ ๊ฐ๋ฅํ๋ค.
๊ฐ์ฒด๋ ๋์ ์ฐ์ฐ์ด ์งํ๋์์์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ๊ฐ์ ์ฃผ์๊ณต๊ฐ์ ์ฐธ์กฐํ๊ฒ ๋๋ค.
person = {
name: 'Lee'
};
let copy = person;
copy.name = 'Kim';
console.log(person.name); // 'Kim' ์ถ๋ ฅ
person๊ณผ copy ๊ฐ์ฒด๋ ๊ฐ์ ์ฃผ์๊ณต๊ฐ์ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ํ ๊ฐ์ฒด์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ๋ค๋ฅธ ๊ฐ์ฒด์ ๊ฐ๋ ๋ณ๊ฒฝ์ด ๋๋ค.
primitive type(์์ ํ์
)๊ณผ object type(๊ฐ์ฒด ํ์
)์ ์ฃผ๋ ์ฐจ์ด์ ๋ํด ์์๋ณด์๋ค.
๋ง์ง๋ง์ผ๋ก ํค์๋๋ฅผ ์ ๋ฆฌํด๋ณด์!
์์๊ฐ๊ณผ ๊ฐ์ฒด๊ฐ์ ์ฃผ๋ ์ฐจ์ด 3๊ฐ์ง๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์์ ๊ฐ์ ์์ ๋ถ๊ฐ๋ฅํ๊ณ , ๊ฐ์ฒด ๊ฐ์ ์์ ์ด ๊ฐ๋ฅํจ
- ์์ ๊ฐ์ ๋ณ์์ ํ ๋นํ๋ฉด ์ค์ ๊ฐ์ด ์ ์ฅ๋๊ณ , ๊ฐ์ฒด๋ ์ฃผ์๊ฐ์ด ์ ์ฅ๋จ
- ์์ ๊ฐ์ ๋ณ์์ ๋์ ํ๋ฉด ์ค์ ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ์ฅ๋๊ณ , ๊ฐ์ฒด๋ ์ฃผ์๊ฐ์ด ๋ณต์ฌ๋์ด ์ ์ฅ๋จ