์ฑ ๋ชฉ์ฐจ๋๋ก ์ฝ์ง์๊ณ ์ฝ์ผ๋ฉฐ ์ ๋ฆฌํ๋ Deep Dive
Day 1 โช 10์ฅ ๊ฐ์ฒด ๋ฆฌํฐ๋ด
๊ฐ์ฒด
์๋ฐ์คํฌ๋ฆฝํธ์์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ํฌํจ
์ธ์คํด์ค
ํด๋์ ์ํด ์์ฑ๋์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ์ค์ฒด
ํจ์์ ๋ฉ์๋์ ์ฐจ์ด
- ํจ์๋ ์ผ๊ธ๊ฐ์ฒด๋ก ๊ฐ์ผ๋ก ์ทจ๊ธ
- ๋ฉ์๋๋ ๊ฐ์ฒด์์ ํ๋กํผํฐ์ ๊ฐ์ผ๋ก ์ฌ์ฉ๋๋ ํจ์ </aside>
๐ Point
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ตฌ์ฑํ๋ “๋ชจ๋ ๊ฒ”์ด ๊ฐ์ฒด๊ฐ ๋ ์ ์๋ค.
๊ฐ์ฒด์ ํจ์๋ ๋ฐ์ ํ ๊ด๊ฒ๊ฐ์๋ค. ํจ์๋ก ๊ฐ์ฒด๋ฅผ ์์ฑ ๋๋ ํจ์์์ฒด๊ฐ ๊ฐ์ฒด๊ฐ ๋๊ธฐ๋ ํ๋ค.
Node.js ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ ์๋ฌ๋ ๋ค๋ฅผ ์ ์๋ค. ๋ธ๋ผ์ฐ์ ๋ window ๊ฐ์ฒด๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ
์๊ฒ๋ ๊ฐ๋
1. ๊ฐ์ฒด์ ํ๋กํผํฐ๋ก ๊ฐ๋ฅํ ๊ฒ๋ค
// 1. ์๋ณ์ ๋ค์ด๋ฐ ๊ท์น์ ๋ฐ๋ฅด์ง ์๋ ํค๋ ๋ฐ๋์ ๋ฐ์ดํ๋ฅผ ์ฌ์ฉ
var person = {
firstName: "Kim",
last-name: 'Lee' // SyntaxError
};
var person = {
firstName: "Kim",
'last-name': 'Lee'
};
// 2. ๋น ๋ฌธ์์ด๋ ํ๋กํผํฐ ํค๋ก ์ฌ์ฉ ๊ฐ๋ฅ
var foo = {
'': ''
};
// 3. ์์ฝ์ด๋ ๊ฐ๋ฅ
var foo = {
var: '',
function: ''
};
// 4. ์ซ์๋ ๊ฐ๋ฅํ์ง๋ง ์๋ฌต์ ์ผ๋ก ๋ฌธ์์ด ๋ณํ
var foo = {
0: 1,
1: 2,
2: 3
};
2. ํ๋กํผํฐ ์ ๊ทผ๋ฒ
// ๋ง์นจํ ํ๊ธฐ๋ฒ, ๋๊ดํธ ํ๊ธฐ๋ฒ์ด ์๋ค.
// ๋๊ดํธ๋ก ์ ๊ทผํ๋ ํ๋กํผํฐ ํค๋ ๋ฐ๋์ ๋ฐ์ดํ๋ก ๊ฐ์ผ ๋ฌธ์์ด
var person = {
name: 'Lee
};
console.log(person.name);
console.log(person['name']);
console.log(person[name]); // ReferenceError: name is not defind
3. ํ๋กํผํฐ ์ญ์
// delete ์ฐ์ฐ์ ์ฌ์ฉ
delete person.name;
4. ํ๋กํผํฐ ์ถ์ฝ
// ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํ๋กํผํฐ ๊ฐ์ ๋ง๋๋ ๊ฒฝ์ฐ ์ด๋ฆ-ํ๋กํผํฐ๊ฐ ๋์ผํ๋ฉด key๋ฅผ ์๋ต ๊ฐ๋ฅ
var x = 1, y = 2;
var obj = {
x: x,
y: y
};
5. ๊ณ์ฐ๋ ํ๋กํผํฐ ์ด๋ฆ
var perfix = 'prop';
var i = 0;
var obj = {};
// ์ด๋ ๊ฒ ํค๋ฅผ ๋์ ์ผ๋ก ์์ฑ๋ ๊ฐ๋ฅํ๋ค
obj[prefix + '-' + ++i] = i;
obj[prefix + '-' + ++i] = i;
obj[prefix + '-' + ++i] = i;
console.log(obj); // {prop-1: 1, prop-2: 2, prop3: 3}
Day 1 โช ์์ ๊ฐ๊ณผ ๊ฐ์ฒด์ ๋น๊ต
์์ / ๊ฐ์ฒด(์ฐธ์กฐ) ํ์
๊ฐ๋ | ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฐ | ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ |
๋ฉ๋ชจ๋ฆฌ | ์ค์ ๊ฐ ์ ์ฅ | ์ฐธ์กฐ๊ฐ์ด ์ ์ฅ |
ํน์ฑ | ๋ถ๋ณ์ฑ | ๊ฐ๋ณ์ฑ |
์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด
๋ง์น ๋ฐฐ์ด์ฒ๋ผ ์ธ๋ฑ์ค๋ก ํ๋กํผํฐ ๊ฐ์ ์ ๊ทผ + lengh ํ๋กํผํฐ๋ฅผ ๊ฐ๋ ๊ฐ์ฒด
์์/๊น์ ๋ณต์ฌ
๊ฐ์ฒด์ 1๋จ๊ณ ๊น์ง๋ง ๋ณต์ฌ | ๊ฐ์ฒด์ ์ค์ฒฉ๋ ๊ฐ์ฒด๊น์ง ๋ชจ๋ ๋ณต์ฌ |
๋ณต์ฌ๋ ๊ฐ์ฒด๋ ์๋ณธ ๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ ๊ณต์ | ์๋ณธ๊ณผ ์๋ํ ๋ ๋ฆฝ๋ ๋ณต์ฌ๋ณธ์ ์์ฑ |
Object.assign()์ด๋ ์คํ๋ ๋ ์ฐ์ฐ์ ...๋ฅผ ์ฌ์ฉํ ๋ณต์ฌ | JSON.parse(JSON.stringify(obj))๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, structuredClone() |
๐ Point
- ๊ฐ์ฒด๋ง์ผ๋ก๋ ์์ฒญ๋๊ฒ ๋ง์ ๊ฐ๋ ๋ค์ด ์กด์ฌ ..
- Javascript์ ํด๋์ค๊ธฐ๋ฐ ๊ฐ์ฒด์งํฅ ์ธ์ด๋ ๊ฐ์ฒด ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ค๋ฅด๊ฒ ํํ๋ ์ ์๋ค
- Javascript๋ ํฌ์ธํฐ๊ฐ ์กด์ฌํ์ง ์์ “์ฐธ์กฐ์ ์ํ ์ ๋ฌ”์ ์๋ฏธ๊ฐ ์ ํํ์ง ์์. ๊ณ ๋ก, “๊ฐ/๊ณต์ ์ ์ํ ์ ๋ฌ”์ด๋ผ๊ณ ํํ
์๊ฒ๋ ๊ฐ๋
- ๋ฌธ์์ด์ ์์ ํ์ ์ด๋ค.
- Java, C++ ๊ฐ์ ํด๋์ค ๊ธฐ๋ฐ์ ์ฌ์ ์ ์ ์๋ ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฒด(์ธ์คํด์ค) ์์ฑ
- Javascript๋ ํด๋์ค ์์ด ๊ฐ์ฒด๋ฅผ ์์ฑ. but, ์ฑ๋ฅ ๋ฉด์์ ์์ฑ/ํ๋กํผํฐ ์ ๊ทผ์ ๋น์ฉ์ด ๋นํจ์จ์
- ๋์ ํ์? ํ๋ ํด๋์ค?
- V8 ์๋ฐ์คํฌ๋ฆฝํธ ์์ง - ๊ฐ์ฒด๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ
- ๊ฐ์ฒด๋ ์์ํ์ ์ด์ง๋ง ํ๋กํผํฐ๋ ์ฐธ์กฐํ์
- == ํ์ ๋ณํ์ ํ์ฉ, === ์๊ฒฉํ ๋๋ฑ ์ฐ์ฐ์
var person1 = {
name: 'Lee'
};
var person2 = {
name: 'Lee'
};
console.log(person1 === person2) // false
console.log(person1.name === person2.name) // true