์๋ฃํ์๋ 8๊ฐ์ง ์๋ฃํ์ด ์๋๋ฐ ๊ทธ ์ค 7๊ฐ๋ ์์ํ์ด๋ค.
์์ํ์ ์ค์ง ํ๋์ ๋ฐ์ดํฐ(๋ฌธ์์ด, ์ซ์ ๋ฑ)๋ง ๋ด์ ์ ์๊ธฐ ๋๋ฌธ์ '์์ํ'์ด๋ผ ๋ถ๋ฅธ๋ค.
๊ทธ๋ฌ๋ ๊ฐ์ฒดํ์ ์์ํ๊ณผ ๋ฌ๋ฆฌ ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ์ ์๋ค.
๐๊ฐ์ฒดํ
- ํค๋ก ๊ตฌ๋ถ๋ ๋ฐ์ดํฐ ์งํฉ์ด๋ ๋ณต์กํ ๊ฐ์ฒด(entity)๋ฅผ ์ ์ฅํ ์ ์๋ค.
- {...} ์ค๊ดํธ๋ฅผ ์ฌ์ฉํด ๋ง๋ค๊ณ , ์ค๊ดํธ ์์๋ 'key-value' ํํ์ธ ํ๋กํผํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ฃ์ ์ ์๋ค.
- ์ค๊ดํธ๋ฅผ ์ด์ฉํด ๊ฐ์ฒด๋ฅผ ์ ์ธํ๋ ๊ฒ์ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ๊ฐ์ฒด ์ ์ธ ์ ์ฃผ๋ก ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
- key -> ๋ฌธ์ํ๋ง ํ์ฉ / value -> ๋ชจ๋ ์๋ฃํ ํ์ฉ
- ํ๋กํผํฐ ํค๋ ํ๋กํผํฐ์ ์ด๋ฆ ๋๋ ์๋ณ์๋ผ๊ณ ๋ ํ๋ค.
๐ ๋ฆฌํฐ๋ด๊ณผ ํ๋กํผํฐ
// 'user' ๋ผ๋ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์
let user = {
name: 'john', // name: 'john' ์ด๋ผ๋ ํ๋กํผํฐ์
age: 30 // age: 20 ์ด๋ผ๋ ํ๋กํผํฐ๋ค๋ก ๊ตฌ์ฑ๋์ด์๋ค.
}
๐ฉโ๐ป ํ๋กํผํฐ ๊ฐ ์ฝ์ด์ค๊ธฐ
let user = {
name: 'John',
age: 30,
'likes birds': true
};
1) ๋๊ดํธ ํ๊ธฐ๋ฒ
- ์ฌ๋ฌ ๋จ์ด๋ฅผ ์กฐํฉํด ํ๋กํผํฐ ํค๋ฅผ ๋ง๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
console.log(user['likes birds']); // true
2) ์ ํ๊ธฐ๋ฒ
console.log(user.name); // John
โ ๏ธ const๋ก ์ ์ธ๋ ๊ฐ์ฒด๋ ์์ ์ด ๊ฐ๋ฅํ๋ค.
const user = {
name: 'John'
}
user.name = 'Amy';
console.log(user.name); // Amy
- const๋ user์ ๊ฐ์ ๊ณ ์ ํ์ง๋ง ํด๋น ๋ด์ฉ์ ๊ณ ์ ํ์ง ์๋๋ค.
๐งฎ ๊ณ์ฐ๋ ํ๋กํผํฐ
- ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ๊ฐ์ฒด ๋ฆฌํฐ๋ด ์์ ํ๋กํผํฐ ํค๊ฐ ๋๊ดํธ๋ก ๋๋ฌ์ธ์ฌ ์๋ ๊ฒฝ์ฐ
let age = '๋์ด';
let soo = {
name: 'soo',
[age]: 27
}
console.log(soo); // {name: 'soo', ๋์ด: 27}
console.log(soo[age]); //27
๐ ๋จ์ถ ํ๋กํผํฐ
- ํ๋กํผํฐ ๊ฐ์ ๊ธฐ์กด ๋ณ์์์ ๋ฐ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ
function makeUser(name, age) {
return {
name: name, // ์ด๋ฆ๊ณผ ๊ฐ์ด ๋ณ์์ ์ด๋ฆ๊ณผ ๋์ผํ๋ค
age: age,
}
}
let user = makeUser('John', 20);
console.log(user.name); // John
// ์ด๋ด ๊ฒฝ์ฐ ํ๋กํผํฐ ๊ฐ ๋จ์ถ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ์งง๊ฒ ์ค์ผ ์ ์๋ค.
function makeUser(name, age) {
return {
name, // ํ๋กํผํฐ ๊ฐ ๋จ์ถ ๊ตฌ๋ฌธ
age,
}
}
let user = makeUser('John', 20);
console.log(user.name); // John
๐ ํ๋กํผํฐ ์ด๋ฆ์ ์ ์ฝ ์ฌํญ
- ๋ณ์ ์ด๋ฆ์๋ 'for', 'let', 'return' ๊ฐ์ ์์ฝ์ด๋ฅผ ์ฌ์ฉํด์๋ ์๋๋๋ฐ, ๊ฐ์ฒด์๋ ์ด๋ฐ ์ ์ฝ์ด ์์ง๋ ์๋ค.
- ๊ทธ๋ฌ๋ ํน๋ณํ๊ฒ ์ ์ฝ์ด ๋๋ ์ด๋ฆ์ด ํ๋ ์๋ค. --> '__proto__'
๐ ํ๋กํผํฐ ์กด์ฌ ์ฌ๋ถ ํ์ธ in'
- 'in' ์ฐ์ฐ์ ์ฌ์ฉ
let user = { age: 30 };
let key = "age";
console.log(key in age); // true
๐ for...in ๋ฐ๋ณต๋ฌธ
- ๊ฐ์ฒด์ ๋ชจ๋ ํค๋ฅผ ์ํํ ์ ์๋ค.
for(key in object) {
...
}
let user = {
name: 'soo',
age: 27,
isAdmin: true
}
for(let key in user) {
// ํค
console.log(key); // name, age, isAdmin
// ํค์ ํด๋นํ๋ ๊ฐ
console.log([key]); // soo, 27, true
}
โจ ๋ฉ์๋, Method
- ๊ฐ์ฒด ํ๋กํผํฐ์ ์ ์ฅ๋ ํจ์
- this๋ก ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค.
let user = {
name: 'John',
age: 30
}
// ๊ฐ์ฒด ํ๋กํผํฐ user.sayHi์ ํจ์๋ฅผ ํ ๋นํด์ค
// ํ ๋น๋ ํจ์๊ฐ Method!
user.sayHi = function() {
alert('hello')
}
user.sayHi();
- ๋ฉ์๋ ๋จ์ถ ๊ตฌ๋ฌธ
user = {
sayHi: function() {
alert('Hello');
}
};
// ์์ ํจ์๋ฅผ ๋จ์ถ ๊ตฌ๋ฌธ์ผ๋ก ๋ฐ๊ฟ๋ณด๊ธฐ
user = {
sayHi() {
alert('Hello');
}
};
๐โโ๏ธ ๋ฉ์๋์ this
- ๋ฉ์๋๋ ๊ฐ์ฒด์ ์ ์ฅ๋ ์ ๋ณด์ ์ ๊ทผํ ์ ์์ด์ผ ์ ์ญํ ์ ํ ์ ์๋ค.(๋๋ถ๋ถ์ ๋ฉ์๋๊ฐ ๊ฐ์ฒด ํ๋กํผํฐ์ ๊ฐ์ ํ์ฉํ๋ค.)
- ๋ฉ์๋ ๋ด๋ถ์์ this ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด์ ์ ๊ทผํ ์ ์๋ค.
let user = {
name: 'John',
age: 30,
// ์ด๋ this๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด๋ 'ํ์ฌ ๊ฐ์ฒด' ์ฆ, user
sayHi() {
console.log('hello ' + this.name); // hello John
}
}
// user.sayHi()๊ฐ ์คํ๋๋ ๋์์ this๋ user ๋ํ๋ธ๋ค.
user.sayHi();
- this๋ ์์ ๋กญ๋ค -> 'strict mode' ๊ฐ ์๋๋๋ this๋ ์ ์ญ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค.
๐ ์์ ๋ก์ด this๊ฐ ๋ง๋ ๊ฒฐ๊ณผ
- this๊ฐ ํญ์ ๋ฉ์๋๊ฐ ์ ์๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ๊ฒ์ด๋ผ๊ณ ์ฐฉ๊ฐํ๊ฒ ๋๋ค. -> bound this
- ์๋ฐ์คํฌ๋ฆฝํธ์์ this๋ ๋ฐํ์ ๋ ๊ฒฐ์ ๋๋ค.
- ๋ฉ์๋๊ฐ ์ด๋์ ์ ์๋์๋๊ฐ์ ์๊ด์์ด '.' ์์ ๊ฐ์ฒด๊ฐ ๋ฌด์์ธ๊ฐ์ ๋ฐ๋ผ ์์ ๋กญ๊ฒ ๊ฒฐ์ ๋๋ค.
- ES6์์๋ Arrow function ๋์ (์์ ๋ง์ this๋ฅผ ๊ฐ์ง์ง ์๊ธฐ ๋๋ฌธ)
- Arrow fucntion ์์ this ์ฐธ์กฐํ๋ฉด arrow function ๋ด๋ถ๊ฐ ์๋ ํ๋ฒํ ์ธ๋ถํจ์์์ this ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
- ๋ณ๊ฐ์ this๊ฐ ๋ง๋ค์ด์ง๋๊ฑด ์ํ์ง ์๊ณ , ์ธ๋ถ์ ์๋ this๋ฅผ ์ฐธ์กฐํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ฌ์ฉ
โจ new ์ฐ์ฐ์, ์์ฑ์ ํจ์
- ์ ์ฌํ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ค์ด์ผ ํ ๋ ์ฌ์ฉํ๋ค.
๐ฉโ๐ป ์์ฑ์ ํจ์ ๋ง๋ค๊ธฐ
1) ํจ์ ์ด๋ฆ์ ์ฒซ ๊ธ์๋ ๋๋ฌธ์๋ก ์์
2) ๋ฐ๋์ 'new' ์ฐ์ฐ์๋ฅผ ๋ถ์ฌ ์คํํ๋ค.
- new User() ์จ์ ํจ์ ์คํํ ๋์ ์๊ณ ๋ฆฌ์ฆ
1) ๋น ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด this์ ํ ๋น
2) ํจ์ ๋ณธ๋ฌธ ์คํ, this์ ์๋ก์ด ํ๋กํผํฐ ์ถ๊ฐํด this ์์
3) this ๋ฐํ
function User(name) {
// this = {}; ๋น ๊ฐ์ฒด๊ฐ ์์์ ์ผ๋ก ๋ง๋ค์ด์ง
// ์๋ก์ด ํ๋กํผํฐ๋ฅผ this์ ์ถ๊ฐ
this.name = name;
this.isAdmin = false;
// return this; this ์์์ ์ผ๋ก ๋ฐํ
}
// 1) ํจ์ ์ด๋ฆ์ ์ฒซ ๊ธ์๋ ๋๋ฌธ์๋ก ์์
// 2) ๋ฐ๋์ 'new' ์ฐ์ฐ์ ๋ถ์ฌ ์คํ
let user = new User('์์');
console.log(user.name); // ์์
console.log(user.isAdmin); // false
๐ต๏ธ ์ต๋ช ์์ฑ์ ํจ์
- ์ฌ์ฌ์ฉํ ํ์๊ฐ ์๋ ๋ณต์กํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผ ํ ๋ ์ฌ์ฉ
- ์ต๋ช ํจ์๋ ์ด๋์๋ ์ ์ฅ๋์ง ์๋๋ค.
- ์ฒ์๋ถํฐ ๋จ ํ๋ฒ์ ํธ์ถ์ ์ํด ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ์ ์ฌ์ฌ์ฉ ๋ถ๊ฐ
- ์ฌ์ฌ์ฉ์ ๋ง์ผ๋ฉด์ ์ฝ๋๋ฅผ ์บก์ํ ํ ์ ์๋ค.
let user = new function() {
this.name = '์์';
this.isAdmin = true;
}
๐โโ๏ธ ์บก์ํ?
- Encapsulation
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์
1) ๊ฐ์ฒด์ ์์ฑ๊ณผ ํ์๋ฅผ ํ๋๋ก ๋ฌถ๊ณ
2) ์ค์ ๊ตฌํ ๋ด์ฉ ์ผ๋ถ๋ฅผ ๋ด๋ถ์ ๊ฐ์ถ์ด ์๋ํ๋ค.
- ํด๋์ค ๋ด๋ถ ๋ณ์์ ๋ฉ์๋๋ฅผ ํ๋๋ก ํจํค์ง ํ๋ ๊ฒ.
์๋ฃํ์๋ 8๊ฐ์ง ์๋ฃํ์ด ์๋๋ฐ ๊ทธ ์ค 7๊ฐ๋ ์์ํ์ด๋ค.
์์ํ์ ์ค์ง ํ๋์ ๋ฐ์ดํฐ(๋ฌธ์์ด, ์ซ์ ๋ฑ)๋ง ๋ด์ ์ ์๊ธฐ ๋๋ฌธ์ '์์ํ'์ด๋ผ ๋ถ๋ฅธ๋ค.
๊ทธ๋ฌ๋ ๊ฐ์ฒดํ์ ์์ํ๊ณผ ๋ฌ๋ฆฌ ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ์ ์๋ค.
๐๊ฐ์ฒดํ
- ํค๋ก ๊ตฌ๋ถ๋ ๋ฐ์ดํฐ ์งํฉ์ด๋ ๋ณต์กํ ๊ฐ์ฒด(entity)๋ฅผ ์ ์ฅํ ์ ์๋ค.
- {...} ์ค๊ดํธ๋ฅผ ์ฌ์ฉํด ๋ง๋ค๊ณ , ์ค๊ดํธ ์์๋ 'key-value' ํํ์ธ ํ๋กํผํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ฃ์ ์ ์๋ค.
- ์ค๊ดํธ๋ฅผ ์ด์ฉํด ๊ฐ์ฒด๋ฅผ ์ ์ธํ๋ ๊ฒ์ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ๊ฐ์ฒด ์ ์ธ ์ ์ฃผ๋ก ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
- key -> ๋ฌธ์ํ๋ง ํ์ฉ / value -> ๋ชจ๋ ์๋ฃํ ํ์ฉ
- ํ๋กํผํฐ ํค๋ ํ๋กํผํฐ์ ์ด๋ฆ ๋๋ ์๋ณ์๋ผ๊ณ ๋ ํ๋ค.
๐ ๋ฆฌํฐ๋ด๊ณผ ํ๋กํผํฐ
// 'user' ๋ผ๋ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์
let user = {
name: 'john', // name: 'john' ์ด๋ผ๋ ํ๋กํผํฐ์
age: 30 // age: 20 ์ด๋ผ๋ ํ๋กํผํฐ๋ค๋ก ๊ตฌ์ฑ๋์ด์๋ค.
}
๐ฉโ๐ป ํ๋กํผํฐ ๊ฐ ์ฝ์ด์ค๊ธฐ
let user = {
name: 'John',
age: 30,
'likes birds': true
};
1) ๋๊ดํธ ํ๊ธฐ๋ฒ
- ์ฌ๋ฌ ๋จ์ด๋ฅผ ์กฐํฉํด ํ๋กํผํฐ ํค๋ฅผ ๋ง๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
console.log(user['likes birds']); // true
2) ์ ํ๊ธฐ๋ฒ
console.log(user.name); // John
โ ๏ธ const๋ก ์ ์ธ๋ ๊ฐ์ฒด๋ ์์ ์ด ๊ฐ๋ฅํ๋ค.
const user = {
name: 'John'
}
user.name = 'Amy';
console.log(user.name); // Amy
- const๋ user์ ๊ฐ์ ๊ณ ์ ํ์ง๋ง ํด๋น ๋ด์ฉ์ ๊ณ ์ ํ์ง ์๋๋ค.
๐งฎ ๊ณ์ฐ๋ ํ๋กํผํฐ
- ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ๊ฐ์ฒด ๋ฆฌํฐ๋ด ์์ ํ๋กํผํฐ ํค๊ฐ ๋๊ดํธ๋ก ๋๋ฌ์ธ์ฌ ์๋ ๊ฒฝ์ฐ
let age = '๋์ด';
let soo = {
name: 'soo',
[age]: 27
}
console.log(soo); // {name: 'soo', ๋์ด: 27}
console.log(soo[age]); //27
๐ ๋จ์ถ ํ๋กํผํฐ
- ํ๋กํผํฐ ๊ฐ์ ๊ธฐ์กด ๋ณ์์์ ๋ฐ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ
function makeUser(name, age) {
return {
name: name, // ์ด๋ฆ๊ณผ ๊ฐ์ด ๋ณ์์ ์ด๋ฆ๊ณผ ๋์ผํ๋ค
age: age,
}
}
let user = makeUser('John', 20);
console.log(user.name); // John
// ์ด๋ด ๊ฒฝ์ฐ ํ๋กํผํฐ ๊ฐ ๋จ์ถ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ์งง๊ฒ ์ค์ผ ์ ์๋ค.
function makeUser(name, age) {
return {
name, // ํ๋กํผํฐ ๊ฐ ๋จ์ถ ๊ตฌ๋ฌธ
age,
}
}
let user = makeUser('John', 20);
console.log(user.name); // John
๐ ํ๋กํผํฐ ์ด๋ฆ์ ์ ์ฝ ์ฌํญ
- ๋ณ์ ์ด๋ฆ์๋ 'for', 'let', 'return' ๊ฐ์ ์์ฝ์ด๋ฅผ ์ฌ์ฉํด์๋ ์๋๋๋ฐ, ๊ฐ์ฒด์๋ ์ด๋ฐ ์ ์ฝ์ด ์์ง๋ ์๋ค.
- ๊ทธ๋ฌ๋ ํน๋ณํ๊ฒ ์ ์ฝ์ด ๋๋ ์ด๋ฆ์ด ํ๋ ์๋ค. --> '__proto__'
๐ ํ๋กํผํฐ ์กด์ฌ ์ฌ๋ถ ํ์ธ in'
- 'in' ์ฐ์ฐ์ ์ฌ์ฉ
let user = { age: 30 };
let key = "age";
console.log(key in age); // true
๐ for...in ๋ฐ๋ณต๋ฌธ
- ๊ฐ์ฒด์ ๋ชจ๋ ํค๋ฅผ ์ํํ ์ ์๋ค.
for(key in object) {
...
}
let user = {
name: 'soo',
age: 27,
isAdmin: true
}
for(let key in user) {
// ํค
console.log(key); // name, age, isAdmin
// ํค์ ํด๋นํ๋ ๊ฐ
console.log([key]); // soo, 27, true
}
โจ ๋ฉ์๋, Method
- ๊ฐ์ฒด ํ๋กํผํฐ์ ์ ์ฅ๋ ํจ์
- this๋ก ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค.
let user = {
name: 'John',
age: 30
}
// ๊ฐ์ฒด ํ๋กํผํฐ user.sayHi์ ํจ์๋ฅผ ํ ๋นํด์ค
// ํ ๋น๋ ํจ์๊ฐ Method!
user.sayHi = function() {
alert('hello')
}
user.sayHi();
- ๋ฉ์๋ ๋จ์ถ ๊ตฌ๋ฌธ
user = {
sayHi: function() {
alert('Hello');
}
};
// ์์ ํจ์๋ฅผ ๋จ์ถ ๊ตฌ๋ฌธ์ผ๋ก ๋ฐ๊ฟ๋ณด๊ธฐ
user = {
sayHi() {
alert('Hello');
}
};
๐โโ๏ธ ๋ฉ์๋์ this
- ๋ฉ์๋๋ ๊ฐ์ฒด์ ์ ์ฅ๋ ์ ๋ณด์ ์ ๊ทผํ ์ ์์ด์ผ ์ ์ญํ ์ ํ ์ ์๋ค.(๋๋ถ๋ถ์ ๋ฉ์๋๊ฐ ๊ฐ์ฒด ํ๋กํผํฐ์ ๊ฐ์ ํ์ฉํ๋ค.)
- ๋ฉ์๋ ๋ด๋ถ์์ this ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด์ ์ ๊ทผํ ์ ์๋ค.
let user = {
name: 'John',
age: 30,
// ์ด๋ this๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด๋ 'ํ์ฌ ๊ฐ์ฒด' ์ฆ, user
sayHi() {
console.log('hello ' + this.name); // hello John
}
}
// user.sayHi()๊ฐ ์คํ๋๋ ๋์์ this๋ user ๋ํ๋ธ๋ค.
user.sayHi();
- this๋ ์์ ๋กญ๋ค -> 'strict mode' ๊ฐ ์๋๋๋ this๋ ์ ์ญ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค.
๐ ์์ ๋ก์ด this๊ฐ ๋ง๋ ๊ฒฐ๊ณผ
- this๊ฐ ํญ์ ๋ฉ์๋๊ฐ ์ ์๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ๊ฒ์ด๋ผ๊ณ ์ฐฉ๊ฐํ๊ฒ ๋๋ค. -> bound this
- ์๋ฐ์คํฌ๋ฆฝํธ์์ this๋ ๋ฐํ์ ๋ ๊ฒฐ์ ๋๋ค.
- ๋ฉ์๋๊ฐ ์ด๋์ ์ ์๋์๋๊ฐ์ ์๊ด์์ด '.' ์์ ๊ฐ์ฒด๊ฐ ๋ฌด์์ธ๊ฐ์ ๋ฐ๋ผ ์์ ๋กญ๊ฒ ๊ฒฐ์ ๋๋ค.
- ES6์์๋ Arrow function ๋์ (์์ ๋ง์ this๋ฅผ ๊ฐ์ง์ง ์๊ธฐ ๋๋ฌธ)
- Arrow fucntion ์์ this ์ฐธ์กฐํ๋ฉด arrow function ๋ด๋ถ๊ฐ ์๋ ํ๋ฒํ ์ธ๋ถํจ์์์ this ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
- ๋ณ๊ฐ์ this๊ฐ ๋ง๋ค์ด์ง๋๊ฑด ์ํ์ง ์๊ณ , ์ธ๋ถ์ ์๋ this๋ฅผ ์ฐธ์กฐํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ฌ์ฉ
โจ new ์ฐ์ฐ์, ์์ฑ์ ํจ์
- ์ ์ฌํ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ค์ด์ผ ํ ๋ ์ฌ์ฉํ๋ค.
๐ฉโ๐ป ์์ฑ์ ํจ์ ๋ง๋ค๊ธฐ
1) ํจ์ ์ด๋ฆ์ ์ฒซ ๊ธ์๋ ๋๋ฌธ์๋ก ์์
2) ๋ฐ๋์ 'new' ์ฐ์ฐ์๋ฅผ ๋ถ์ฌ ์คํํ๋ค.
- new User() ์จ์ ํจ์ ์คํํ ๋์ ์๊ณ ๋ฆฌ์ฆ
1) ๋น ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด this์ ํ ๋น
2) ํจ์ ๋ณธ๋ฌธ ์คํ, this์ ์๋ก์ด ํ๋กํผํฐ ์ถ๊ฐํด this ์์
3) this ๋ฐํ
function User(name) {
// this = {}; ๋น ๊ฐ์ฒด๊ฐ ์์์ ์ผ๋ก ๋ง๋ค์ด์ง
// ์๋ก์ด ํ๋กํผํฐ๋ฅผ this์ ์ถ๊ฐ
this.name = name;
this.isAdmin = false;
// return this; this ์์์ ์ผ๋ก ๋ฐํ
}
// 1) ํจ์ ์ด๋ฆ์ ์ฒซ ๊ธ์๋ ๋๋ฌธ์๋ก ์์
// 2) ๋ฐ๋์ 'new' ์ฐ์ฐ์ ๋ถ์ฌ ์คํ
let user = new User('์์');
console.log(user.name); // ์์
console.log(user.isAdmin); // false
๐ต๏ธ ์ต๋ช ์์ฑ์ ํจ์
- ์ฌ์ฌ์ฉํ ํ์๊ฐ ์๋ ๋ณต์กํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผ ํ ๋ ์ฌ์ฉ
- ์ต๋ช ํจ์๋ ์ด๋์๋ ์ ์ฅ๋์ง ์๋๋ค.
- ์ฒ์๋ถํฐ ๋จ ํ๋ฒ์ ํธ์ถ์ ์ํด ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ์ ์ฌ์ฌ์ฉ ๋ถ๊ฐ
- ์ฌ์ฌ์ฉ์ ๋ง์ผ๋ฉด์ ์ฝ๋๋ฅผ ์บก์ํ ํ ์ ์๋ค.
let user = new function() {
this.name = '์์';
this.isAdmin = true;
}
๐โโ๏ธ ์บก์ํ?
- Encapsulation
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์
1) ๊ฐ์ฒด์ ์์ฑ๊ณผ ํ์๋ฅผ ํ๋๋ก ๋ฌถ๊ณ
2) ์ค์ ๊ตฌํ ๋ด์ฉ ์ผ๋ถ๋ฅผ ๋ด๋ถ์ ๊ฐ์ถ์ด ์๋ํ๋ค.
- ํด๋์ค ๋ด๋ถ ๋ณ์์ ๋ฉ์๋๋ฅผ ํ๋๋ก ํจํค์ง ํ๋ ๊ฒ.