13. ์์ ๊ฐ๊ณผ ๊ฐ์ฒด์ ๋น๊ต
๐ ์์ ๊ฐ
๐ฃ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฐ
1. ์์ ํ์ ์ ๊ฐ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฐ.
2. ์ฝ๊ธฐ ์ ์ฉ ๊ฐ์ผ๋ก ์ด๋ค ์ผ์ด ์์ด๋ ๋ณ๊ฒฝํ ์ ์๋ค.
3. ๋ฐ์ดํฐ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๋ค.
ํท๊ฐ๋ฆฌ๋ฉด ์๋๋ ์ !
์์ ๊ฐ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ ์ ์๋๊ฑฐ์ง ๋ณ์๋ ์ธ์ ๋ ์ฌํ ๋น์ ํตํด ๋ณ์๊ฐ์ ๋ณ๊ฒฝ ํ ์ ์๋ค.
์์๋ ์ฌํ ๋น์ด ๊ธ์ง๋ ๋ณ์์ผ ๋ฟ์ด์ง ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฐ์ ๋์ผํ๊ฒ ์๊ฐํ๋ฉด ์๋๋ค!
์์๊ฐ์ ํ ๋นํ ๋ณ์์ ์๋ก์ด ์์ ๊ฐ์ ์ฌํ ๋นํ๋ฉด
์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํด ์ฌํ ๋นํ ์์ ๊ฐ์ ์ ์ฅํ๋ค.
๋ณ์๋ ์ฌํ ๋นํ ์์๊ฐ์ ๊ฐ๋ฆฌํค๊ณ ์ฐธ์กฐํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฃผ์๊ฐ ์ฌํ ๋นํ ๊ณณ์ผ๋ก ๋ฐ๋๋ค.
๊ฐ์ ์ด๋ฐ ํน์ฑ์ ๋ถ๋ณ์ฑ์ด๋ผ๊ณ ํ๋ค.
๋ถ๋ณ์ฑ์ ๊ฐ๋ ์์ ๊ฐ์ ํ ๋นํ ๋ณ์๋ ์ฌํ ๋น ์ด์ธ์ ๋ณ์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๋ค!
๐ฃ ๋ฌธ์์ด๊ณผ ๋ถ๋ณ์ฑ
์์ ๊ฐ์ ์ ์ฅํ๋ ค๋ฉด ๋จผ์ ํ๋ณดํด์ผ ํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํด์ผ ํ๋ค.
๊ทธ๋์ ์์ ํ์ ๋ณ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํฌ๊ธฐ๊ฐ ๋ฏธ๋ฆฌ ์ ํด์ ธ์๋ค.
์์ ๊ฐ์ธ ๋ฌธ์์ด์ ์๋์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ๋๋ค.
1๊ฐ์ ๋ฌธ์ = 2๋ฐ์ดํธ
1๊ฐ์ ๋ฌธ์๋ก ์ด๋ค์ง ๋ฌธ์์ด์ 2๋ฐ์ดํธ 10๊ฐ์ ๋ฌธ์๋ก ์ด๋ค์ง ๋ฌธ์์ด์ 20๋ฐ์ดํธ๊ฐ ํ์ํ๋ค.
var str1 = ''; //0๊ฐ์ ๋ฌธ์๋ก ์ด๋ค์ง ๋ฌธ์์ด
var str2 = 'hello'; // 5๊ฐ์ ๋ฌธ์๋ก ์ด๋ค์ง ๋ฌธ์์ด - 10๋ฐ์ดํธ ํ์ํจ
๋ฌธ์์ด์ JS์ ์ฅ์ ์ค ํ๋๋ก ์์ํ์ ์ด๊ณ ๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๋ค.
var str = 'hello';
str = 'world';
1. ์ฒซ๋ฒ์งธ ๋ฌธ์ด ์คํ๋๋ฉด hello๊ฐ ์์ฑ๋๊ณ ์๋ณ์ str์ ๋ฌธ์์ด์ด ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฒซ๋ฒ์งธ ๋ฉ๋ชจ๋ฆฌ ์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
2. ๋๋ฒ์งธ ๋ฌธ์ด ์คํ๋๋ฉด ์๋ก์ด ๋ฌธ์์ด์ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑํ๊ณ str์ ์๋ก์ด ๋ฌธ์์ด์ด ์๋ ๋ฉ๋ชจ๋ฆฌ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
3. ์ฒซ๋ฒ์งธ hello๋ฅผ ์์ ๊ณ ์๋ก์ด ๋ฌธ์์ด์ ๋ฎ์ด์์ฐ๋๊ฒ ์๋๋ผ ๋ ๊ฐ๋ค ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ๋ค.
4. str์ด hello๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค๊ฐ ์๋ณ์์ ๊ฐ์ ๋ฐ๊ฟจ์๋ ์๋ก์ด ๋ฌธ์์ด์ ๊ฐ๋ฆฌํค๋๋ก ๋ณ๊ฒฝ๋์๋ ๊ฒ.
๋ฌธ์์ด์ ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด(๋ฐฐ์ด์ฒ๋ผ ์ธ๋ฑ์ค ์ ๊ทผ, length ํ๋กํผํฐ๋ฅผ ๊ฐ์ง ๊ฐ์ฒด)์ด๋ฉด์
์ดํฐ๋ฌ๋ธ(์ํ ๊ฐ๋ฅ)์ด๋ฏ๋ก ๋ฐฐ์ด๊ณผ ์ ์ฌํ๊ฒ ๋ฌธ์์ ์ ๊ทผ ๊ฐ๋ฅ.
var str = 'string';
str[0] = 'S'; // ์์๊ฐ์ด์ฌ์ ์ํํ๋ ๋ฌธ์์ด ์ค๊ฐ๊ฐ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ! ์๋ฌ๋ ๋ฐ์ํ์ง ์๋๋ค
console.log(str) // string
์์ ์์์ฒ๋ผ ์ด๋ฏธ ์์ฑ๋ ๋ฌธ์์ด์ ์ผ๋ถ ๋ฌธ์๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
๊ทธ๋์ ๋ฐ์ดํฐ์ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๋ค.
๋ณ์์ ์๋ก์ด ๋ฌธ์์ด ์์ฒด๋ฅผ ์ฌํ ๋นํ๋๊ฑด ๊ฐ๋ฅํ๋ค.
๊ธฐ์กด ๋ฌธ์์ด์ ์์ ํ๋๊ฒ ์๋ ์๋ก์ด ๋ฌธ์์ด์ ํ ๋นํ๊ธฐ ๋๋ฌธ!
๐ฃ ๊ฐ์ ์ํ ์ ๋ฌ
์๋ ์์์ score ๋ณ์์ ์๋ก์ด ๊ฐ 100์ ์ฌํ ๋นํ๋ฉด copy ๋ณ์์ ๊ฐ์ ์ด๋ป๊ฒ ๋ ๊น?
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๊ฐ์ธ 80์ด ์๋กญ๊ฒ ์์ฑ๋์ด ํ ๋น๋๋ค.
๋ณ์์ ์์๊ฐ์ ๊ฐ๋ ๋ณ์๋ฅผ ํ ๋นํ๋ฉด ํ ๋น๋ฐ๋ ๋ณ์ copy์๋
ํ ๋น๋๋ ๋ณ์ score์ ์์ ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ๋ฌ๋๋๊ฒ. ๊ฐ์ ์ํ ์ ๋ฌ์ด๋ค.
๋ณต์ฌ๋์ด ์ ๋ฌ๋์ด์ก๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ๋ ๋ณ๊ฐ์ ๊ฐ์ด๋ค.
๊ทธ๋์ ์ ๋ต์ 80์ด๋ค.
๋ ๋ณ์๋ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ๋ ๋ณ๊ฐ์ ๊ฐ์ด๋ผ๋๊ฒ์ ์๊ฐํ๊ณ ์๋์ ๋ฌธ์ ๋ฅผ ์๊ฐํด๋ณด์.
var score = 80;
var copy = score;
console.log(score, copy); // 1.
console.log(score === copy); // 2.
score = 100;
console.log(score, copy); // 3.
console.log(score === copy); // 4.
1. 80 80
2. true
3. 100 80
4. false
์ฌ์ค ๊ฐ์ ์ํ ์ ๋ฌ์ ์๊ฒฉํ๊ฒ ํํํ๋ฉด ๋ณ์์๋ ๊ฐ์ด ์ ๋ฌ๋๋๊ฒ์ด ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ์ ๋ฌ๋๋๊ฒ!
๋ณ์๊ฐ์ ์๋ณ์๋ ๊ฐ์ด ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ธฐ์ตํ๊ณ ์๋ค.
๊ทธ๋์ ์๋ณ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๋ถ์ธ ์ด๋ฆ์ด๋ผ๊ณ ๋ ํ ์ ์๋ค.
๐ ๊ฐ์ฒด
1. ํ๋กํผํฐ์ ๊ฐ์๊ฐ ์ ํด์ ธ์์ง ์๋ค.
2. ๋์ ์ผ๋ก ์ถ๊ฐ ์ญ์ ํ ์ ์๋ค.
3. ํ๋กํผํฐ ๊ฐ์๋ ์ ์ฝ์ด ์๋ค.
4. ๊ทธ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํฌ๊ธฐ๋ฅผ ์ฌ์ ์ ์ ํด๋ ์ ์๋ค.
๊ฐ์ฒด๋ ์ํฉ์ ๋ฐ๋ผ์ ํฌ๊ธฐ๊ฐ ๋งค์ฐ ํด์๋ ์๋ค.
๊ทธ๋์ ์์๊ฐ ๋ณด๋ค๋ ๋น์ฉ์ด ๋ง์ด ๋ ๋ค.
๐ฃ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ
๊ฐ์ฒด์ ๊ฐ์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋ค.
๊ฐ์ฒด๋ฅผ ํ ๋นํ ๋ณ์๊ฐ ๊ธฐ์ตํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ๊ทผํ๋ฉด ์ฐธ์กฐ ๊ฐ์ ์ ๊ทผํ๋ค.
์ฐธ์กฐ ๊ฐ์ ์์ฑ๋ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฃผ์์ด๋ค.
๊ทธ๋์ ์์๊ฐ์ ๊ฐ์ง ๋ณ์๋ ๋ณ์๋ 00๊ฐ์ ๊ฐ๋๋ค ๋ผ๊ณ ํ ์ ์์ง๋ง
๊ฐ์ฒด๋ฅผ ๊ฐ์ง ๋ณ์๋ ๋ณ์๋ ๊ฐ์ฒด๋ฅผ '์ฐธ์กฐ' ๋๋ '๊ฐ๋ฆฌํค๊ณ ์๋ค'๊ณ ํํํ๋ค.
๊ฐ์ฒด๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์ฌํ ๋น ์์ด ๊ฐ์ฒด๋ฅผ ์ง์ ๋ณ๊ฒฝํ ์ ์๋ค.
(ํ๋กํผํฐ ๋์ ์์ฑ, ํ๋กํผํฐ ๊ฐ ๊ฐฑ์ , ํ๋กํผํฐ ๊ฐ ์ญ์ ๋ชจ๋ ๊ฐ๋ฅ)
var person = {
name : 'Lee'
};
//ํ๋กํผํฐ ๊ฐ ๊ฐฑ์
person.name = 'Kim';
//ํ๋กํผํฐ ๋์ ์์ฑ
person.address = 'Seoul';
console.log(person); // {name : "kim", address : "Seoul"}
์์์ ๋ฌ๋ฆฌ ๊ฐ์ฒด๋ฅผ ๋ณ์์ ์ฌํ ๋น ํ์ง ์์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ ๋ณ์์ ์ฐธ์กฐ ๊ฐ์ ๋ณ๊ฒฝ๋์ง ์๋๋ค.
๊ฐ์ฒด ์์ฑ ๋ฐ ๊ด๋ฆฌ ๋ฐฉ์์ ๋ณต์กํ๊ณ ๋น์ฉ์ด ๋ง์ด ๋ ๋ค.
๊ทธ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ์ํด ๊ฐ์ฒด๋ฅผ ์ด๋ ๊ฒ ๋ณ๊ฒฝ๊ฐ๋ฅํ ๊ฐ์ผ๋ก ์ค๊ณํ๋ค๊ณ ํ๋ค.
์ด๋ฐ ๊ตฌ์กฐ์ ๋จ์ ๋ ์๋ค.
์ฌ๋ฌ๊ฐ์ ์๋ณ์๊ฐ ํ๋์ ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ ์ ์๋ค๋๊ฒ.
๐ฃ ์ฐธ์กฐ์ ์ํ ์ ๋ฌ
var person ={
name : 'Lee'
};
// ์์ ๋ณต์ฌ (๊ฐ์ฒด๋ฅผ ํ ๋นํ ๋ณ์๋ฅผ ๋ค๋ฅธ ๋ณ์์ ํ ๋น)
var copy = person;
์ด๋ ๊ฒ ์์ ๋ณต์ฌ๋ก ์๋ณธ์ ์ฐธ์กฐ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ๋ฌ๋๋๊ฒ์ ์ฐธ์กฐ์ ์ํ ์ ๋ฌ์ด๋ผ๊ณ ํ๋ค.
์๋ณธ person๊ณผ ์ฌ๋ณธ copy๋ ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ ๋ค๋ฅด์ง๋ง ๋ชจ๋ ๋์ผํ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
์ด๊ฒ์ด ๊ตฌ์กฐ์ ๋ถ์์ฉ์ด๋ผ๊ณ ํ๋ ๋๊ฐ์ ์๋ณ์๊ฐ ํ๋์ ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ด๋ค.
๋์๋ณ์ ๋ค ํ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์๊ธฐ๋๋ฌธ์ ํ์ชฝ์ด ์์ ํ๋ฉด ๋ค๋ฅธํ์ชฝ๋ ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋๋ค.
1. ๊ฐ์ ์ํ ์ ๋ฌ (ํ ๋น๋๋ ๋ณ์์ ์์ ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ๋ฌ๋๋๊ฒ - ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋กญ๊ฒ ํ ๋น)
2. ์ฐธ์กฐ์ ์ํ ์ ๋ฌ (์์ ๋ณต์ฌ๋ก ์๋ณธ์ ์ฐธ์กฐ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ๋ฌ๋๋๊ฒ - ํ๋์ ๊ฐ์ฒด ๊ณต์ )
์ด ๋๊ฐ์ง๋ ์๋ณ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ๋์ด ์๋ ๊ฐ์ ๋ณต์ฌํด์ ์ ๋ฌํ๋ ๋ฉด์์ ๋์ผํ๋ค.
๋ณ์์ ์ ์ฅ๋์ด ์๋ ๊ฐ์ด ์์๊ฐ์ด๋ ์ฐธ์กฐ๊ฐ์ด๋ ์ฐจ์ด๋ง ์๊ธฐ๋๋ฌธ์ JS์์๋ ๊ฐ์ ์ํ ์ ๋ฌ๋ง ์กด์ฌํ๋ค๊ณ ๋งํ ์ ์๋ค.
์๋ ์์ ๋ฅผ ์์ธกํ๋ฉด ์ ์ดํดํ๊ฒ๐ฅฒ
var person1 = {
name : 'Lee'
};
var person2 = {
name : 'Lee'
};
console.log(person1 === person2); //1.
console.log(person1.name === person2.name); //2.
1. false - person1๊ณผ person2๊ฐ ๊ฐ๋ฅดํค๋ ๊ฐ์ฒด ๋ด์ฉ์ ๊ฐ์ง๋ง ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋ณ๊ฐ์ ๊ฐ์ฒด
2. true - ํ๋กํผํฐ ๊ฐ๋ค๋ก ํ๊ฐ๋ ์ ์๋ ํํ์. ๋ชจ๋ ์์๊ฐ 'Lee'๋ก ํ๊ฐ.