21/09/11 TL. ๊ฐ์ฒด ๋ฆฌํฐ๋ด, ์์ ๊ฐ๊ณผ ๊ฐ์ฒด์ ๋น๊ต
- -
๐ ๊ฐ์ฒด๋?
js๋ ๊ฐ์ฒด ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค. js๋ฅผ ๊ตฌ์ฑํ๋ ๊ฑฐ์ "๋ชจ๋ ๊ฒ"์ด ๊ฐ์ฒด๋ค. ์์ ๊ฐ์ ์ ์ธํ ๋๋จธ์ง ๊ฐ(ํจ์, ๋ฐฐ์ด, ์ ๊ท ํํ์ ๋ฑ)์ ๋๋ฌด ๊ฐ์ฒด๋ค.
์์ ํ์ ์ ๋จ ํ๋์ ๊ฐ๋ง ๋ํ๋ด์ง๋ง ๊ฐ์ฒด ํ์ ์ ๋ค์ํ ํ์ ์ ๊ฐ์ ํ๋์ ๋จ์๋ก ๊ตฌ์ฑํ ๋ณตํฉ์ ์ธ ์๋ฃ๊ตฌ์กฐ๋ค. ๋ํ ์์ ํ์ ๊ฐ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฐ์ด์ง๋ง ๊ฐ์ฒด๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ์ด๋ค. ๋ฐ๋ผ์ ๊ฐ์ฒด๋ฅผ ์์ฑํด ๋๊ณ ๋์ค์ ํ๋กํผํฐ๋ฅผ ๋์ ์ผ๋ก ์ถ๊ฐํ ์๋ ์๋ค.
๊ฐ์ฒด๋ 0๊ฐ ์ด์์ ํ๋กํผํฐ๋ก ๊ตฌ์ฑ๋ ์งํฉ์ด๋ฉฐ, ํ๋กํผํฐ๋ ํค์ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
js์์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ๊ฐ์ ํ๋กํผํฐ๊ฐ ๋ ์ ์๋ค. js์ ํจ์๋ ์ผ๊ธ ๊ฐ์ฒด์ด๋ฏ๋ก ๊ฐ์ผ๋ก ์ทจ๊ธ ๊ฐ๋ฅํ๊ณ , ํจ์๋ ํ๋กํผํฐ ๊ฐ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ํ๋กํผํฐ ๊ฐ์ด ํจ์์ผ ๊ฒฝ์ฐ, ์ผ๋ฐ ํจ์์ ๊ตฌ๋ถํ๊ธฐ ์ํด ๋ฉ์๋๋ผ ๋ถ๋ฅธ๋ค.
์ฆ, ๊ฐ์ฒด๋ ํ๋กํผํฐ์ ๋ฉ์๋๋ก ๊ตฌ์ฑ๋ ์งํฉ์ฒด์ด๋ค. ์ด์ฒ๋ผ ๊ฐ์ฒด๋ ์ํ์ ๋์์ ํ๋์ ๋จ์๋ก ๊ตฌ์กฐํํ ์ ์์ด ์ ์ฉํ๋ค.
- ํ๋กํผํฐ : ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ํ๋ด๋ ๊ฐ
- ๋ฉ์๋ : ํ๋กํผํฐ(์ํ ๋ฐ์ดํฐ)๋ฅผ ์ฐธ์กฐํ๊ณ ์กฐ์ํ ์ ์๋ ๋์
๐ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ์ํ ๊ฐ์ฒด ์์ฑ
C++๋ ์๋ฐ ๊ฐ์ ํด๋์ค ๊ธฐ๋ฐ ๊ฐ์ฒด์งํฅ ์ธ์ด๋ ํด๋์ค๋ฅผ ์ฌ์ ์ ์ํ๊ณ ํ์ํ ์์ ์ new ์ฐ์ฐ์์ ํจ๊ป ์์ฑ์๋ฅผ ํธ์ถํ์ฌ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ค.
- ์ธ์คํด์ค : ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์ด ์ค์ ๋ก ์กด์ฌํ๋ ์ํ์ด๋ค.
js๋ ํ๋กํ ํ์ ๊ธฐ๋ฐ ๊ฐ์ฒด์งํฅ ์ธ์ด๋ก์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
- ๊ฐ์ฒด ๋ฆฌํฐ๋ด
- Object ์์ฑ์ ํจ์
- ์์ฑ์ ํจ์
- Object.create ๋ฉ์๋
- ํด๋์ค(SE6)
๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด๋ค. ์ค๊ดํธ ๋ด์ 0๊ฐ ์ด์์ ํ๋กํผํฐ๋ฅผ ์ ์ํ๋ฉด js ์์ง์ ๋ณ์์ ํ ๋นํ๋ ์์ ์ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ํด์ํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
var person = {
name: 'Kim',
sayHello: function() {
console.log(`Hello My name is ${this.name}`)
}
};
console.log(typeof person); // object
console.log(person); // {name: "Lee", sayHello: f}
๋ง์ฝ ์ค๊ดํธ ๋ด ํ๋กํผํฐ๋ฅผ ์ ์ํ์ง ์์ผ๋ฉด ๋น ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค.
var empty = {};
console.log(typeof empty); // object
์ฝ๋ ๋ธ๋ญ์ ๋ซ๋ ์ค๊ดํธ ๋ค์๋ ;๋ฅผ ๋ถ์ด์ง ์์ง๋ง, ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ๋ซ๋ ์ค๊ดํธ ๋ค์๋ ;๋ฅผ ๋ถ์ธ๋ค. ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ๊ฐ์ผ๋ก ํ๊ฐ๋๋ ํํ์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๐ ํ๋กํผํฐ
ํ๋กํผํฐ ํค, ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฐ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
- ํ๋กํผํฐ ํค : ๋น ๋ฌธ์์ด์ ํฌํจํ๋ ๋ชจ๋ ๋ฌธ์์ด ๋๋ ์ฌ๋ฒ ๊ฐ
- ํ๋กํผํฐ ๊ฐ : js์์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ๊ฐ
ํ๋กํผํฐ ํค์๋ ์๋ณ์ ๋ค์ด๋ฐ ๊ท์น์ ์งํจ๋ค๋ฉด ''ํน์ ""๋ก ๋ฌถ์ ํ์๊ฐ ์์ง๋ง, ์๋ ๊ฒฝ์ฐ ๋ฐ๋์ ๋ฌถ์ด์ผ ํ๋ค.
var person = {
firstName: 'Seokyung',
// js๋ -๋ฅผ ์ฐ์ฐ์๋ก ์ธ์ํ๋ฏ๋ก last-name์ ์๋ณ์ ๋ค์ด๋ฐ ๊ท์น์ ์ค์ํ์ง ์๋๋ค.
'last-Name': 'Kim'
};
console.log(persone); // { firstName:"Seokyung", last-name: "Kim" }
var person = {
firstName: 'Seokyung',
last-Name: 'Kim' // Uncaught SyntaxError: Unexpected token '-'
};
ํ๋กํผํฐ ํค๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋์ ์ผ๋ก ์์ฑํ ์๋ ์๋ค. ์ด ๊ฒฝ์ฐ ํ๋กํผํฐ ํค๋ก ์ฌ์ฉํ ํํ์์ [] ๋ก ๋ฌถ์ด์ผ ํ๋ค.
var person = {
firstName: 'Seokyung',
// js๋ -๋ฅผ ์ฐ์ฐ์๋ก ์ธ์ํ๋ฏ๋ก last-name์ ์๋ณ์ ๋ค์ด๋ฐ ๊ท์น์ ์ค์ํ์ง ์๋๋ค.
'last-Name': 'Kim'
};
console.log(persone); // { firstName:"Seokyung", last-name: "Kim" }
var person = {
firstName: 'Seokyung',
last-Name: 'Kim' // Uncaught SyntaxError: Unexpected token '-'
};
- ๋ง์ฝ, ํ๋กํผํฐ ํค๋ก ๋ฌธ์์ด์ด๋ ์ฌ๋ฒ ๊ฐ ์ธ์ ๊ฐ์ ์ฌ์ฉํ๋ฉด ์๋ฌต์ ํ์ ๋ณํ์ ํตํด ๋ฌธ์์ด์ด ๋๋ค.
- var, function ๊ฐ์ ์์ฝ์ด๋ฅผ ํ๋กํผํฐ ํค๋ก ์ฌ์ฉํด๋ ์๋ฌ๋ฅผ ๋ฐ์ํ์ง ์์ง๋ง, ์์ ๋ชปํ ์๋ฌ๋ฅผ ๋ฐ์์ํฌ ์ฌ์ง๊ฐ ์์ผ๋ฏ๋ก ๊ถ์ฅํ์ง ์๋๋ค.
- ์ด๋ฏธ ์กด์ฌํ๋ ํ๋กํผํฐ ํค๋ฅผ ์ค๋ณต ์ ์ธํ๋ฉด ๋์ค์ ์ ์ธํ ํ๋กํผํฐ ํค๊ฐ ๋จผ์ ์ ์ธํ ํ๋กํผํฐ๋ฅผ ๋ฎ์ด์ด๋ค. ์๋ฌ๋ฅผ ๋ฐ์ํ์ง ์๋๋ค.
๐ ํ๋กํผํฐ ์ ๊ทผ
ํ๋กํผํฐ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง๊ฐ ์๋ค.
- ๋ง์นจํ ํ๊ธฐ๋ฒ : ์ ๊ทผ ์ฐ์ฐ์ .์ผ๋ก ์ ๊ทผํ๋ค.
- ๋๊ดํจ ํ๊ธฐ๋ฒ : ์ ๊ทผ ์ฐ์ฐ์ []์ผ๋ก ์ ๊ทผํ๋ค.
ํ๋กํผํฐ์ ์ ๊ทผํ ๋๋ ํ๋กํผํฐ ํค๋ฅผ ๋ฐ๋์ ๋ฐ์ดํ๋ก ๊ฐ์ธ์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ณ์๋ก ํด์ํ๊ธฐ ๋๋ฌธ์ ReferenceError๋ฅผ ๋ฐํํ๋ค.
var person = {
name: 'Kim'
};
consoel.log(person['name']); // Kim
console.log(person[name]); // ReferenceError: name is not defined
// Node์์๋ ReferenceError, ๋ธ๋ผ์ฐ์ ์์๋ undefined์ด๋ค.
console.log(person.age) // undefined
์ถ๊ฐ๋ก, ๊ฐ์ฒด์ ์กด์ฌํ์ง ์๋ ํ๋กํผํฐ์ ์ ๊ทผํ๋ฉด undefined๋ฅผ ๋ฐํํ๋ค. ReferenceError๋ฅผ ๋ฐ์ํ์ง ์๋๋ค.
๐ ํ๋กํผํฐ ์ญ์
delete ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์ญ์ ํ ์ ์๋ค. ๋ง์ฝ ์กด์ฌํ์ง ์๋ ํ๋กํผํฐ๋ฅผ ์ญ์ ํ๋ฉด ์๋ฌด๋ฐ ์๋ฌ ์์ด ๋ฌด์๋๋ค.
var person = {
name: 'Kim'
};
// ๋์ ์์ฑ
person.age = 20;
delete person.age;
delete person.address;
console.log(person); // {name: "Kim"}
๐ ES6์์ ์ถ๊ฐ๋ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ํ์ฅ ๊ธฐ๋ฅ
๐ฅฅ ํ๋กํผํฐ ์ถ์ฝ ํํ
ES6์์๋ ํ๋กํผํฐ ๊ฐ์ผ๋ก ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ณ์ ์ด๋ฆ๊ณผ ํ๋กํผํฐ ํค๊ฐ ๋์ผํ ์ด๋ฆ์ผ ๋, ํ๋กํผํฐ ํค๋ฅผ ์๋ตํ ์ ์๋ค. ์ด๋ ํ๋กํผํฐ ํค๋ ๋ณ์ ์ด๋ฆ์ผ๋ก ์๋ ์์ฑ๋๋ค.
let x = 1, y = 2;
const obj = { x, y };
console.log(obj); // {x: 1, y: 2}
๐ฅฅ ๊ณ์ฐ๋ ํ๋กํผํฐ ์ด๋ฆ
๋ฌธ์์ด ํํ์์ ์ฌ์ฉํด ํ๋กํผํฐ ํค๋ฅผ ๋์ ์ผ๋ก ์์ฑํ ์ ์๋ค. ์ด ๋ ํ๋กํผํฐ ํค๋ก ์ฌ์ฉํ ํํ์์ ๋๊ดํธ๋ก ๋ฌถ์ด์ผ ํ๋ค. ์ด๋ฅผ ๊ณ์ฐ๋ ํ๋กํผํฐ ์ด๋ฆ์ด๋ผ ํ๋ค.
var prefix = '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, prop-3: 3}
๐ฅฅ ๋ฉ์๋ ์ถ์ฝ ํํ
ES6์์๋ ๋ฉ์๋๋ฅผ ์ ์ํ ๋ function ํค์๋๋ฅผ ์๋ตํ ์ถ์ฝ ํํ์ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ ๊ฒ ์ ์ํ ๋ฉ์๋๋ ํ๋กํผํฐ์ ํ ๋นํ ํจ์์ ๋ค๋ฅด๊ฒ ๋์ํ๋ค. ์ด์ ๋ํ ๋ด์ฉ์ ํ์ ํ๋ค.
const obj = {
name: 'Kim',
sayHi() {
console.log('Hi! ' + this.name);
}
}
obj.sayHi(); // Hi! Kim
'TL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
21/09/13 TL. ์ปดํจํฐ ์์คํ ์ ๊ตฌ์กฐ (0) | 2021.09.14 |
---|---|
21/09/12 TL. ์๋ฐ์คํฌ๋ฆฝํธ - ํจ์(1) (0) | 2021.09.12 |
21/09/08 TL. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ๊ณผ ์ข ๋ฅ (0) | 2021.09.08 |
21/08/09 TL. db ๋ฆฌํ๋ฆฌ์ผ์ด์ vs ํด๋ฌ์คํฐ๋ง. GTID (0) | 2021.08.09 |
21/04/15 TL. OPTEE (0) | 2021.04.16 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค