๐ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ต์ฌ) 11์ฅ. ์์ ๊ฐ๊ณผ ๊ฐ์ฒด์ ๋น๊ต
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ ๊ณตํ๋ 7๊ฐ์ง ๋ฐ์ดํฐ ํ์ (์ซ์, ๋ฌธ์์ด, ๋ถ๋ฆฌ์ธ, null, undefinedm ์ฌ๋ฒ, ๊ฐ์ฒด ํ์ )์ ์์ ํ์ ๊ณผ ๊ฐ์ฒด ํ์ ์ผ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
- ์์ ํ์
์ ๊ฐ
- ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฐ
- ์์ ๊ฐ์ ๋ณ์์ ํ ๋นํ๋ฉด ๋ณ์(ํ๋ณด๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ)์๋ ์ค์ ๊ฐ ์ ์ฅ
- ๊ฐ์ ์ํ ์ ๋ฌ : ๋ค๋ฅธ ๋ณ์์ ํ ๋นํ๋ฉด ์๋ณธ์ ์์ ๊ฐ ๋ณต์ฌ๋์ด ์ ๋ฌ
- ๊ฐ์ฒด(์ฐธ์กฐ) ํ์
์ ๊ฐ
- ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ
- ๊ฐ์ฒด๋ฅผ ๋ณ์์ ํ ๋นํ๋ฉด ๋ณ์(ํ๋ณด๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ)์๋ ์ฐธ์กฐ ๊ฐ ์ ์ฅ
- ์ฐธ์กฐ์ ์ํ ์ ๋ฌ : ๋ค๋ฅธ ๋ณ์์ ํ ๋นํ๋ฉด ์๋ณธ์ ์ฐธ์กฐ ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ๋ฌ
01. ์์ ๊ฐ
1) ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฐ
์์ ํ์ ์ ๊ฐ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฐ์ด๋ค.
ํ๋ฒ ์์ฑ๋ ์์ ๊ฐ์ ์ฝ๊ธฐ ์ ์ฉ ๊ฐ์ผ๋ก์ ๋ณ๊ฒฝํ ์ ์๋ค.
2) ๋ฌธ์์ด๊ณผ ๋ถ๋ณ์ฑ
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฌธ์์ด์ ์์ ํ์ ์ด๋ฉฐ, ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๋ค.
์ด๊ฒ์ ๋ฌธ์์ด์ด ์์ฑ๋ ํ ๋ณ๊ฒฝ๋ ๊ฒ์ธ์ง, ์ฝ๋๋ฅผ ํตํด ์์๋ณด์.
๐ฅ๏ธ ์์ ์ฝ๋
var str = 'Hello';
str = 'world';
์ฒซ ๋ฒ์งธ ๋ฌธ -> ๋ฌธ์์ด 'Hello' ์์ฑ, ์๋ณ์ str์ ๋ฌธ์์ด 'Hello'๊ฐ ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฒซ ๋ฒ์งธ ๋ฉ๋ชจ๋ฆฌ ์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํด.
๋ ๋ฒ์งธ ๋ฌธ -> ์๋ก์ด ๋ฌธ์์ด 'world'๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑ, ์๋ณ์ str์ ์ด๊ฒ์ ๊ฐ๋ฆฌํด.
์ด๋ ๋ฌธ์์ด 'Hello'์ 'world'๋ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ๋ค.
์๋ณ์ str์ ๋ฌธ์์ด 'Hello'๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค๊ฐ ๋ฌธ์์ด 'world'๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ๋ณ๊ฒฝ๋์์ ๋ฟ์ธ ๊ฒ์ด๋ค.
3) ๊ฐ์ ์ํ ์ ๋ฌ
"๊ฐ์ ์ํ ์ ๋ฌ" ์ด๋ผ๊ณ ๋ ํ์ง๋ง, ๊ฐ์ ์ ๋ฌํ๋ ๊ฒ์ด ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ๋ฌํ๋ค.
๋จ, ์ ๋ฌ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ๊ทผํ๋ฉด ๊ฐ์ ์ฐธ์กฐํ ์ ์๋ค.
๐ฅ๏ธ ์์ ์ฝ๋
var score = 80;
var copy = score;
console.log(score); // 80
console.log(copy); // 80
score = 100;
console.log(score); // 100
console.log(copy); // ?
์ ์์ ์์ ? ์๋ ๋ฌด์์ด ๋ค์ด๊ฐ์ผ ํ ๊น.
"๋ณ์์ ๋ณ์๋ฅผ ํ ๋นํ์ ๋ ๋ฌด์์ด ์ด๋ป๊ฒ ์ ๋ฌ๋๋๊ฐ?" ์ ๋ํ ๋ต๋ณ์ด ๋ ๊ฒ์ด๋ค.
copy ๋ณ์์ ์์ ๊ฐ์ ๊ฐ๋ score ๋ณ์๋ฅผ ํ ๋นํ๋ฉด, ํ ๋น๋ฐ๋ ๋ณ์(copy)์ ํ ๋น๋๋ ๋ณ์(score)์ ์์ ๊ฐ 80์ด ๋ณต์ฌ๋์ด ์ ๋ฌ๋๋ค.
โก๏ธ score ๋ณ์์ ์๋ก์ด ์ซ์ ๊ฐ 100์ ์ฌํ ๋นํ๋๋ผ๋, copy ๋ณ์์๋ ์์ ๊ฐ 80์ด ๋ณต์ฌ๋์ด ์ ๋ฌ๋์๊ธฐ ๋๋ฌธ์, ์ฌ์ ํ copy ๋ณ์์ ๊ฐ์ 80์ด๋ค.
๐ก score ๋ณ์์ copy ๋ณ์์ ๊ฐ 80์ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ๋ ๋ณ๊ฐ์ ๊ฐ์ด๋ค.
๋ณ์์๋ ๊ฐ์ด ์ ๋ฌ๋๋ ๊ฒ์ด ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ์ ๋ฌ๋๋ค.
๋ณ์์ ๊ฐ์ ์๋ณ์๋ ๊ฐ์ด ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ธฐ์ตํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
โป ์๋ณ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๋ถ์ธ ์ด๋ฆ์ด๋ผ๊ณ ํ ์ ์๋ค.
02. ๊ฐ์ฒด
1) ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ
๐ฅ๏ธ ์์ ์ฝ๋
var person = {
name: 'Lee'
};
๊ฐ์ฒด๋ฅผ ํ ๋นํ ๋ณ์๊ฐ ๊ธฐ์ตํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ๊ทผํ๋ฉด ์ฐธ์กฐ ๊ฐ(reference value)์ ์ ๊ทผํ ์ ์๋ค.
์ฐธ์กฐ ๊ฐ์ ์์ฑ๋ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฃผ์, ๊ทธ ์์ฒด๋ค.
๊ฐ์ฒด๋ฅผ ํ ๋นํ ๋ณ์๋ "๋ณ์๋ ๊ฐ์ฒด๋ฅผ ์ฐธ๊ณ ํ๊ณ ์๋ค" ๋๋ "๋ณ์๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค"๋ผ๊ณ ํํํ๋ค.
์ ์์ ์์ person ๋ณ์๋ ๊ฐ์ฒด { name: 'Lee' }๋ฅผ ์ฐธ๊ณ ํ๊ณ (๊ฐ๋ฆฌํค๊ณ ) ์๋ค.
๊ฐ์ฒด๋ฅผ ํ ๋นํ ๋ณ์๋ ์ฌํ ๋น ์์ด ๊ฐ์ฒด๋ฅผ ์ง์ ๋ณ๊ฒฝํ ์ ์๋ค.
-> ์ฌํ ๋น ์์ด ํ๋กํผํฐ ๋์ ์ถ๊ฐ / ํ๋กํผํฐ ๊ฐ ๊ฐฑ์ / ํ๋กํผํฐ ์์ฒด๋ฅผ ์ญ์ ๊ฐ๋ฅ
๐ก ์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ
- ์์ ๋ณต์ฌ : 1๋จ๊ณ๋ง ๋ณต์ฌ
- ๊น์ ๋ณต์ฌ : ์ฌ๊ท์ ์ผ๋ก ์์ ๊ฐ๊น์ง ์ ๋ถ ๋ณต์ฌ
2) ์ฐธ์กฐ์ ์ํ ์ ๋ฌ
๐ฅ๏ธ ์์ ์ฝ๋
var person = {
name: 'Lee'
};
// ์ฐธ์กฐ ๊ฐ์ ๋ณต์ฌ(์์ ๋ณต์ฌ)
var copy = person;
โก๏ธ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ณ์(์๋ณธ, person) -> ๋ณ์(์ฌ๋ณธ, copy)์ ํ ๋นํ๋ฉด ์๋ณธ์ ์ฐธ์กฐ ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ๋ฌ๋๋ค.
โก๏ธ ๋ ๊ฐ์ ์๋ณ์(person, copy) ๊ฐ ํ๋์ ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ๊ฒ ๋๋ค.
โก๏ธ ์๋ณธ ๋๋ ์ฌ๋ณธ ์ค ์ด๋ ํ์ชฝ์์ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝ(๊ฐ์ฒด์ ํ๋กํผํฐ ๊ฐ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ํ๋กํผํฐ ์ถ๊ฐ, ์ญ์ )ํ๋ฉด ์๋ก ์ํฅ์ ์ฃผ๊ณ ๋ฐ๋๋ค.
๐ ์ฐธ๊ณ ์๋ฃ
[๋ฌด๋ฃ] ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฅ๋ค์ด๋ธ ์คํฐ๋ - ์ธํ๋ฐ | ๊ฐ์
ใ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฅ๋ค์ด๋ธใ ์ฑ ๋ด์ฉ์ ๊ทธ๋๋ก ๋ฐ๋ผ๊ฐ๋ ์คํฐ๋ ์์์ ๋๋ค. ํจ๊ป ๊ณต๋ถํ๋ฉด ํจ์ฌ ์ฌ์์ง ๊ฑฐ์์!, - ๊ฐ์ ์๊ฐ | ์ธํ๋ฐ
www.inflearn.com