โ25. Class
โ Class
ํด๋์ค๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ์ ๋๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋, ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ค๋ก ๊ตฌ์ฑํ๊ณ , ๊ฐ์ฒด๋ค ๊ฐ์ ์๋ก ์ํธ ์์ฉ ํ๋๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ค, ์ค๋ช ์ด ์กฐ๊ธ ์ด๋ ค์ด๋ฐ์.
JavaScript๋ ๊ฐ์ฒด์งํฅ ์ค์ฌ์ ์๋ ์ธ์ด๋ ์๋์ง๋ง ํ๋ก๊ทธ๋๋ฐ์ ์์ด์ Class, ๊ฐ์ฒด, ๊ฐ์ฒด์งํฅ์ ํญ์ ์ค์ํ ์ฃผ์ ์ ๋๋ค.
'๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ' ์ด๋ผ๋ ๋จ์ด์์ '๊ฐ์ฒด'๋ ์์ ๋ฐฐ์ ๋ { num: 1 } ์ ๋ฐ์ดํฐ ํ์ ์ ๋งํ๋ ๊ฒ์ ์๋๋๋ค.
๊ฐ์ฒด๋ ์์ด๋ก object, ๋ง๊ทธ๋๋ก ์ฌ๋ฌผ์ ๋ปํฉ๋๋ค.
ํ์ง๋ง, ํด๋์ค๋ ๊ฒฐ๊ตญ { num: 1 } ์ฒ๋ผ ์๊ธด ๊ฐ์ฒด(object)๋ฅผ ์ ์ค๊ณํ๊ธฐ ์ํ ํ์ ๋ง์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด ๋์ ๊ฐ์ฒด๋ ํน์ ๋ก์ง์ ๊ฐ๊ณ ์๋ ํ๋(method)์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ํ(๋ฉค๋ฒ ๋ณ์)๋ฅผ ๊ฐ์ง๋๋ค.
์ํ๋ ๊ตฌ์กฐ์ ๊ฐ์ฒด ํ์ ์ง๋๊ณ , ๋น์ทํ ๋ชจ์์ ๊ฐ์ฒด๋ฅผ ๊ณต์ฅ์ฒ๋ผ ์ฐ์ด๋ผ ์ ์์ต๋๋ค.
๊ฐ์ฒด๋ฅผ ๋งค๋ฒ ๋ง๋ค์ด์ ์ฌ์ฉํด๋ ์ข์ง๋ง, ํฐ ํ๋ชจ์ ๊ฐ์ฒด ์ด๊ฑฐ๋ ๋น์ทํ ๋ชจ์์ ๊ฐ์ฒด๋ฅผ ๊ณ์ ๋ง๋ค์ด์ผ ํ๋ค๋ฉด,
class๋ผ๋ ์ค๊ณ๋๋ฅผ ํตํด ๋ง๋ค ์ ์์ต๋๋ค.
CSS์ class์ ์ ํ ๋ค๋ฅธ ๊ฐ๋ ์ด๋ ์ ์ํด ์ฃผ์ธ์!
๋จผ์ , 'ray' ์ฐจ๋ฅผ ๊ฐ์ฒด๋ก ์ ์ํด๋ณด๊ฒ ์ต๋๋ค.
ray ๋ผ๋ ๊ฐ์ฒด๋ 5๊ฐ์ ํ๋กํผํฐ๋ฅผ ๊ฐ๊ณ ์์ต๋๋ค.
๊ฐ ํ๋กํผํฐ ์ด๋ฆ์ ์๋์ ๊ฐ์ต๋๋ค.
- name
- price
- getName
- getPrice
- applyDiscount
let ray = {
name: 'Ray',
price: 2000000,
getName: function() {
return this.name;
},
getPrice: function() {
return this.price;
},
applyDiscount: function(discount) {
return this.price * discount;
}
}
์กฐ๊ธ ์์ํ ํํ์ด ์๋ค์.
ํ๋กํผํฐ ๊ฐ์ ํจ์๊ฐ ํ ๋น๋์์ต๋๋ค.
๋ค!! ์ด๋ ๊ฒ ๊ฐ์ฒด์ ํ๋กํผํฐ ๊ฐ์๋ ํจ์๋ ๋ฃ์ ์ ์์ต๋๋ค.
์์์ getPrice ๋ผ๋ ํจ์๋ ๋ค์๊ณผ ๊ฐ์ด ํธ์ถํ ์ ์์ต๋๋ค.
const rayPriceByFunction = ray.getPrice();
console.log('ํจ์๋ก ์ ๊ทผ => ' +rayPriceByFunction);
๊ฐ์ฒด ๋ด๋ถ์์, ํด๋น ๊ฐ์ฒด์ ํ๋กํผํฐ์ ์ ๊ทผํ๋ ค๋ฉด "this"๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋์ getPrice ๋ฉ์๋์์ this.price ๋ก price ํค์ ์ ๊ทผํ ์ ์์๊ณ ,
2000000 ๊ฐ์ ๊ฐ๊ณ ์ฌ ์ ์์ต๋๋ค.
์์ ์ฝ๋๊ฐ ์ฐจ ์์ ์ ์์ ์ฐ๋ ์ฑ์๋น์ค์์ ์ฌ์ฉ๋๋ค๊ณ ์๊ฐํด๋ณด๊ฒ ์ต๋๋ค.
์๋ก์ด ์ฐจ๊ฐ ์ถ์๋์ด ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํด์ผ ํ๋๋ฐ,
ํ๋กํผํฐ๋ ๋๊ฐ์ด ๊ตฌ์ฑ๋์ด์ผ ํฉ๋๋ค.
์ด๋ด ๋, ์ฐจ๋ง๋ค ๊ฐ์ฒด๋ฅผ ๋๋ ค๋๊ฐ์ ์ฝ๋๊ฐ ๊ธธ์ด์ง๋ ๊ฒ์ด ์๋๋ผ,
ํ์ํ ์ ๋ณด๋ฅผ ๋ด์ Car๋ผ๋ *ํด๋์ค(class)*๋ฅผ ์์ฑํ์ฌ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
index.js 22๋ฒ์งธ ์ค์ Morning์ด๋ผ๋ ์ฐจ๋ฅผ ์ด๋ป๊ฒ ๋ฑ๋กํ ์ ์๋์ง ์์ฑํ์ต๋๋ค.
Run์ ๋๋ ค ์ด๋ค ๊ฐ์ด ๋์ค๋์ง ํ์ธํด๋ณด์ธ์.
โ ์์ฑ์(Constructor)
๊ฐ์ฒด(object)์ ์ค๊ณ๋์ธ ํด๋์ค(class)๋ ๋ฌธ๋ฒ์ด ๋น์ทํฉ๋๋ค.
๋์ ๊ฐ์ฅ ํฐ ์ฐจ์ด๋ constructor ๋ผ๋ ์์ฑ์ ํจ์์ ๋๋ค.
39๋ฒ์งธ ์ค์ class๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํ์ต๋๋ค.
์๋์ ๊ฐ์ด class๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ '์ธ์คํด์คํ'๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
const morning = new Car('Morning', 2000000);
class๋ฅผ ํตํด ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ธ์คํด์ค ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
class๋ ์๋ก์ด instance๋ฅผ ์์ฑํ ๋๋ง๋ค constructor() ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
class Car {
constructor(name, price) {
this.name = name;
this.price = price;
}
}
- Car๋ class์ด๋ฆ์ ๋๋ค. ํญ์ ๋๋ฌธ์๋ก ์์ํ๊ณ , CamelCase๋ก ์์ฑํด์ผ ํฉ๋๋ค.
- Car class์ instance๋ฅผ ์์ฑํ ๋๋ง๋ค constructor ๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค.
- constructor() ๋ฉ์๋๋ name, price 2๊ฐ์ argument(์ธ์)๋ฅผ ๋ฐ์ต๋๋ค.
- constructor() ๋ฉ์๋์ this ํค์๋๋ฅผ ์ฌ์ฉํ์ต๋๋ค. class์ ์คํ๋ฒ์(context)์์ this ๋ ํด๋น instance๋ฅผ ์๋ฏธํฉ๋๋ค.
- constructor() ์์ ์ธ์๋ก ๋์ด์ค๋ name๊ณผ price๋ฅผ ์ฌ์ฉํด Car instance์ name, price ํ๋กํผํฐ์ ๊ฐ์ ํ ๋นํ์ต๋๋ค.
- ์ด๋ ๊ฒ ํด๋์ค ๋ด์์ name, price์ ๊ฐ์ด ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ํ๊ฐ์ด์ class๋ด์ ์ปจํ ์คํธ์์ ์ด๋ ๊ณณ์์๋ ์ฌ์ฉํ ์ ์๋ ๋ณ์๋ฅผ '๋ฉค๋ฒ ๋ณ์'๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
- ๋ฉค๋ฒ ๋ณ์๋ this ํค์๋๋ก ์ ๊ทผํฉ๋๋ค.
โ ์ธ์คํด์ค(Instance)
์์์ class instance๋ฅผ ์์ฑํ์ต๋๋ค.
์ธ์คํด์ค(Instance)๋ class๋ฅผ ํตํด ์์ฑ๋ ๊ฐ์ฒด์ ๋๋ค.
์ธ์คํด์ค๋ class์ property์ด๋ฆ๊ณผ method๋ฅผ ๊ฐ๋ ๊ฐ์ฒด์ ๋๋ค.
์ธ์คํด์ค ๋ง๋ค ๋ชจ๋ ๋ค๋ฅธ ํ๋กํผํฐ ๊ฐ์ ๊ฐ๊ณ ์์ต๋๋ค.
const morning = new Car('Morning', 20000000);
- ์ธ์คํด์ค๋ Class ์ด๋ฆ์ new ๋ฅผ ๋ถ์ฌ์ ์์ฑํฉ๋๋ค.
- ํด๋์ค ์ด๋ฆ ์ฐ์ธก์ () ๊ดํธ๋ฅผ ์ด๊ณ ๋ซ๊ณ , ๋ด๋ถ์๋ constructor ์์ ํ์ํ ์ ๋ณด๋ฅผ ์ธ์๋ก ๋๊ฒจ์ค๋๋ค.
- Carํด๋์ค์ instance๋ฅผ morning ์ด๋ผ๋ ๋ณ์์ ์ ์ฅํ์ต๋๋ค.
- ๋ค์ ํ ๋ฒ! Car ํด๋์ค์ ์๋ก์ด instance๋ฅผ ์์ฑํ๋ ค๋ฉด new ํค์๋๊ฐ ํ์ํฉ๋๋ค. new ํค์๋๋ constructor() ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ์๋ก์ด instance๋ฅผ returnํด์ค๋๋ค.
- 'Morning'์ด๋ผ๋ String๊ณผ 2000000 ์ด๋ผ๋ Number๋ฅผ Car ์์ฑ์์ ๋๊ฒจ์ฃผ์๊ณ , name, price ํ๋กํผํฐ์ ๊ฐ์์ ๊ฐ์ด ํ ๋น๋์์ต๋๋ค.
์๋ก์ด ์ฐจ๋ฅผ ๋ฑ๋กํด ๋ด ์๋ค.
const spaceship = new Car('์ฐ์ฃผ์ ', 25000000);
console.log(spaceship);
console.log(spaceship.name);
console.log(spaceship.price);
console.log(spaceship.applyDiscount(0.5));
โ ๋ฉ์๋(Methods)
๋ฉ์๋๋ ํจ์์ ๋๋ค.
๊ทธ๋ฐ๋ฐ ๊ฐ์ฒด๊ฐ ํ๋กํผํฐ ๊ฐ์ผ๋ก ๊ฐ๊ณ ์๋ ๊ฒ์ ๋ฉ์๋๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
Class์ method๋ Object(๊ฐ์ฒด)์ ๋ฌธ๋ฒ๊ณผ ๋๊ฐ์ต๋๋ค.
๋ค๋ง ๊ฐ์ฒด๋ ํ๋กํผํฐ๋ง๋ค comma(,)๋ก ๊ตฌ๋ถํด์ค์ผ ํ์ง๋ง, ํด๋์ค๋ ๊ทธ๋ ์ง ์์ต๋๋ค.
Car ๊ฐ์ฒด์ changeDepartment ๋ฉ์๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
class Car {
constructor(name, price) {
this.name = name;
this.price = price;
this.department = "์ ๋ฆ์ง์ ";
}
applyDiscount(discount) {
return this.price * discount;
}
changeDepartment(departmentName) {
this.department = departmentName;
}
}
changeDepartment ๋ฉ์๋๋ฅผ ํธ์ถํด๋ณด๊ณ ํด๋น ์ธ์คํด์ค์ department ์ ๋ณด๊ฐ ๋ฐ๋์๋์ง ํ์ธํด ๋ด ์๋ค.
Assignment
class ์์ฑ์ ์ฐ์ตํด๋ณด๊ฒ ์ต๋๋ค.
- MyMath ๋ผ๋ class๋ฅผ ์์ฑํด์ฃผ์ธ์.
- constructor ์์๋ ์ซ์ 2๊ฐ๋ฅผ ์ธ์๋ก ๋ฐ์ ํ๋กํผํฐ๋ก ์ ์ฅํฉ๋๋ค.
- ์ด 4๊ฐ์ ๋ฉ์๋๋ฅผ ๊ตฌํํด์ฃผ์ธ์.
- getNumber : ๋ ๊ฐ์ ์ซ์๊ฐ ๋ฌด์์ธ์ง ๋ฐฐ์ด๋ก ๋ฐํํ๋ ๋ฉ์๋ → ex) [1, 2]
- add : ๋ ๊ฐ์ ์ซ์๋ฅผ ๋ํ๋ ๋ฉ์๋
- substract : ๋ ๊ฐ์ ์ซ์๋ฅผ ๋นผ๋ ๋ฉ์๋
- multiply : ๋ ๊ฐ์ ์ซ์๋ฅผ ๊ณฑํ๋ ๋ฉ์๋
class MyMath {
constructor(num1, num2) {
this.num1 = num1;
this.num2 = num2;
}
getNumber(){
return [this.num1, this.num2];
}
add() {
return this.num1 + this.num2;
}
subtract() {
return this.num1 - this.num2;
}
multiply() {
return this.num1 * this.num2;
}
}
โ26. Object -๋ค์ :)
โ Object
๊ฐ์ฒด๋ ๋ค๋ฅธ ๋ฐ์ดํฐ ํ์ (ํ ์คํธ, ์ซ์, ๋ฐฐ์ด ๋ฑ..)์ฒ๋ผ ๋ณ์์ ์ ์ฅํ ์ ์์ต๋๋ค.
{} ๋ง ์ฌ์ฉํ๋ฉด ๋๋๋ฐ์, ์ด๋ ๊ฒ {} ์ผ๋ก ์๊ธด ๋ชจ์์ ๊ฐ์ฒด๋ฅผ object literal(๊ฐ์ฒด ๋ฆฌํฐ๋ด)์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
hello ๋ผ๋ ๋ณ์์ ๋น ๊ฐ์ฒด๋ฅผ ํ ๋นํ์์ต๋๋ค.
let hello = {};
๊ฐ์ฒด๋ ์์๊ฐ ์๋ ๋ฐ์ดํฐ์ ๋ชจ์์ ๋๋ค.
๋ฐ๋๋ก ์์๊ฐ ์๋ ๋ฐ์ดํฐ๋ ๋ฐฐ์ด์ ๋๋ค.
let arr = ['๊ณ ์์ด', '๊ท์ฌ์', '๋ฉ๋ฉ์ด', '์ข์'];
arr ์ ์์๊ฐ ์ฐจ๋ก๋๋ก ์ถ๊ฐ๋ ๊ฒ์ด๊ณ index ๋ 0๋ถํฐ ์์ํฉ๋๋ค.
arr[0] ์ '๊ณ ์์ด' ์ด๊ณ , arr[1] ์ '๊ท์ฌ์' ์ ๋๋ค.
๊ฐ์ฒด๋ ํค(key)-๊ฐ(value) ์์ผ๋ก๋ ๋ฐ์ดํฐ์ ๋ชจ์์ผ๋ก์จ ์์๊ฐ ๋ค ๋ฐ๋์ด๋ ์๋ฌด ์๊ด์ด ์์ต๋๋ค. ๋ฐฐ์ด์ฒ๋ผ ์์๋๋ก index ๋ก ์ ๊ทผํ๋๊ฒ ์๋๋ผ ํค๋ก ์ ๊ทผํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
key๋ property name์ด๋ผ๊ณ ๋ ํ๋ฉฐ, value๋ property value๋ผ๊ณ ๋ ๋งํฉ๋๋ค.
์ด์ ๊ฐ์์์๋ ํ๋กํผํฐ๋ช , ํ๋กํผํฐ๊ฐ์ผ๋ก ๋ถ๋ ์ผ๋ ์ด๋ฒ์๋ ํค, ๊ฐ์ผ๋ก ๋ถ๋ฅด๊ฒ ์ต๋๋ค.
ํค๋ ๋ง์น ํน์ ๊ฐ์ ๊ฐ๊ณ ์๋ ๋ณ์๊ฐ์ ์ญํ ์ ํฉ๋๋ค. ํด๋น ํค๋ก ํ๋กํผํฐ์ ์ด๋ค ๊ฐ์ด ์ ์ฅ๋ผ ์๋์ง ์ ์ ์์ต๋๋ค.
ํค์ ๊ฐ์๋ ํ ์คํธ, ์ซ์ ๋ฟ๋ง ์๋๋ผ ํจ์, ๊ฐ์ฒด๋ ๋ฃ์ ์ ์์ต๋๋ค.
let difficult = {
'my name': 'boong',
color: 'silver',
ํค: 'ํ๊ธ์ธ ํค๋ ๋ฐ์ดํ๊ฐ ์์ด๋ ๋๋๊ตฐ!!',
'!ํค': '๋๋ํ ์๋ ํค๋ ๋ฐ์ดํ๊ฐ ํ์ํ๊ตฐ',
$special: '$๋ ์์ด๋ ๋๋๊ตฐ'
};
๊ฐ์ฒด์ ํค์๋ ์คํ์ด์ค, ํ๊ธ, ํน์๋ฌธ์ ๋ฑ์ด ๋ค์ด๊ฐ ์ ์์ต๋๋ค. ๋ณ์(variable) ์ ์ธํ ๋๋ ํ ์ ์์๋ ํํ์ ๋๋ค. color ์ ๊ฐ์ด ํค์ ํน์๋ฌธ์๊ฐ ์์ผ๋ฉด ๋ฐ์ดํ๋ฅผ ์๋ตํ๊ณ ์ธ ์ ์์ต๋๋ค.
๋ค์ํ ํ๋กํผํฐ ๋ช ์ ๋ฃ์ด๋ณด๊ณ ์คํฌ๋ฆฝํธ ์ค๋ฅ๊ฐ ์๋์ง ํ์ธํด๋ณด์ธ์.
โ ํ๋กํผํฐ ์ ๊ทผ
์ด์ ๊ฐ์ Assignment๊ฐ ์ฌ์ค ๋ ์ด๋ ค์ ์ต๋๋ค. ๊ทธ ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์ ํ๋กํผํฐ ์ ๊ทผ์ ์ต์ํด์ผ ํ์ต๋๋ค.
์ด๋ฒ ์๊ฐ์ ์ต์ํด์ง ์ ์๋๋ก ๋ค์ ํ ๋ฒ ํ์ด๋ณด๊ฒ ์ต๋๋ค. ์ ๊ทผ์ dot(.)์ผ๋ก ์ ๊ทผํ๋ ๋ฐฉ๋ฒ๊ณผ, [] ๋๊ดํธ๋ก ์ ๊ทผํ๋ ๋ฒ์ด ์์์ต๋๋ค.
let difficult = {
33: '์ซ์ ํ์๋ ๋๋ค',
'my name': '์คํ์ด์ค ํฌํจ ๊ฐ๋ฅ',
color: 'silver',
ํค: 'ํ๊ธ์ธ ํค๋ ๋ฐ์ดํ๊ฐ ์์ด๋ ๋๋๊ตฐ!!',
'!ํค': '๋๋ํ ์๋ ํค๋ ๋ฐ์ดํ๊ฐ ํ์ํ๊ตฐ',
$special: '$๋ ์์ด๋ ๋๋๊ตฐ'
};
console.log(difficult.color);
์ฌ์ค ํค๋ง ์๊ณ ์์ผ๋ฉด dot(.)์ผ๋ก ์ ๊ทผํ๋ ๊ฒ์ด ์ ์ผ ํธํฉ๋๋ค. dot(.)์ ํค๋ก ๋ฐ๋ก ์ ๊ทผํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. dot์ผ๋ก ์ ๊ทผํ ๋๋ ๋ฐ์ดํ ์์ด ํค๋ฅผ ๋ฐ๋ก ์จ์ค์ผ ํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ [] ๋๊ดํธ๋ก ์ ๊ทผํ ์๋ ์์์ฃ !
console.log(difficult['color']);
๋๊ดํธ๋ก ์ ๊ทผ ํ๊ธฐ ์ํด์๋, ํค ์ด๋ฆ์ ๋ฐ์ดํ๋ก ๊ฐ์ธ์ ์์ฑํด์ค์ผ ํฉ๋๋ค.
ํ๋ฒ ์ฃผ์์ ํ๊ณ ์คํํด๋ณด์ธ์!
console.log(difficult.my name);
์ ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์คํ์ ์ ํด๋ด๋ ์ค๋ฅ๊ฐ ๋ ๊ฒ๋ง ๊ฐ์ต๋๋ค.
์ด๋ ๊ฒ ์คํ์ด์ค๊ฐ ํฌํจ๋ ํค๋ ๋๊ดํธ๋ก ์ ๊ทผํ๋ฉด ๋ฉ๋๋ค.
console.log(difficult['my name']);
์๋์ ์ฝ๋๋ ์ ์ง ๋ ๊ฒ ๊ฐ์ง๋ง ๋์ง ์์ต๋๋ค.
console.log(difficult.33);
์ซ์๋ก ๋ ํค๋ ๋๊ดํธ๋ก ์ ๊ทผํด์ผ ํฉ๋๋ค.
console.log(difficult['33']);
์ด๋ค ๊ฒ์ dot(.)์ ๊ทผ ๊ฐ๋ฅ, ์ด๋ค ๊ฒ์ ๋๊ดํธ๋ง ๊ฐ๋ฅ..
๋ค ์ธ์์ผ ํ๋์? ์๋๋๋ค.
์ด์ฐจํผ ์ฝ๋ฉํ ๋ ์ ๋ชป ์ ๊ทผํ๋ฉด ์ค๋ฅ๊ฐ ๋จ๊ธฐ ๋๋ฌธ์ ์ง๊ธ ๋ชจ๋ฅด์ ๋ ๊ด์ฐฎ์ต๋๋ค. ์ค๋ฅ ๋จ๋ฉด ๊ทธ ๋ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํ์ธํ๊ณ ์์ ํ๋ฉด ๋ฉ๋๋ค! ์ด๋ ๊ฒ ๋ค์ํ ํํ๋ก ํค ์ด๋ฆ์ ์ง์ ์ ์๋ค๋ ๊ฒ๋ง ์์์ฃผ์ธ์.
โ ๋ณ์๋ก ํ๋กํผํฐ ์ ๊ทผํ๊ธฐ
let name = 'ํค';
console.log(difficult[name]);
๋ณ์์ ํค ์ด๋ฆ์ด ์ ์ฅ๋์ด์์ผ๋ฉด, ๋ณ์๋ก๋ ํ๋กํผํฐ์ ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค.
์ด๋ dot(.) ๋ค์์ ๋ณ์๋ช ์ ๋ฃ์ด์ ํ๋กํผํฐ์ ์ ๊ทผ์ด ๊ฐ๋ฅ ํ ๊น์?
console.log(difficult.name);
์ง์ ์คํ ํด๋ด ์๋ค. ๋ญ๋ผ๊ณ ๋์ค๋์? undefined ์ ๋๋ค.
dot(.)์ผ๋ก ์ ๊ทผํ๋ค๋ ๋ป์ ์ค์ ํค์ด๋ฆ์ ์ธ ๋์ ๋๋ค.
'name' ์ด๋ผ๋ ํค๊ฐ ์์์ผ๋ฉด ๊ทธ์ ํด๋นํ๋ ํ๋กํผํฐ์ ์ ๊ทผํ ์ ์์๊ฒ ์ง๋ง, ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ undefined ๊ฐ ๋์จ๊ฒ์ ๋๋ค. ๋ณ์๋ก ์ ๊ทผํ ๋๋ ํญ์ ๋๊ดํธ๋ก ์ ๊ทผํด์ผ ํฉ๋๋ค.
โ ํ๋กํผํฐ ํ ๋น
difficult[name] = '๊ฐ ๋ฐ๊พผ๋ค';
console.log(difficult[name]);
difficult.color = '์๊น';
console.log(difficult.color);
console.log('์์ฑ์ : ' + difficult.new);
difficult.new = '์๋ก ์ถ๊ฐ๋ ํ๋กํผํฐ';
console.log('์์ฑํ: ' + difficult.new);
๊ฐ์ฒด์ ์ด๋ฏธ ํค๊ฐ ์กด์ฌํ๋๋ฐ, ๋ค์ ํ ๋ฒ ํ ๋นํ๋ฉด ๊ฐ์ด ๊ต์ฒด(์์ )๋ฉ๋๋ค.
์ด์ ์ ์๋ ํค๋ก ์ ๊ทผํ๋ฉด, ์๋ก์ด ํ๋กํผํฐ๊ฐ ์ถ๊ฐ ๋ฉ๋๋ค.
์์ง ์๋ ํค์ ์ ๊ทผํ๋ฉด ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ ์ค๋น๋ ๋์ด์์ง๋ง, ๊ฐ์ด ์์ต๋๋ค
console.log(difficult.newProperty);
์ด๋ค ๊ฐ์ด ๋์ค๋์? ๋ค, undefined ์ ๋๋ค.
์์ง difficult ๋ผ๋ ๊ฐ์ฒด์ newProperty ํ๋กํผํฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ undefined ์ ๋๋ค. ์๋๋ ์์๋ ํค์ ๊ฐ์ ๋ฐ๋ก ์ ๋ ฅํด์ ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
difficult.realNewProperty = '์ถ๊ฐ ๋๋ค';
๊ฐ์ฒด์ ํน๋ณํ ์ ์ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค.
๊ฐ์ฒด๋ฅผ const ๋ก ์ ์ธํ์ ๋ ์์ญ๋ฌ์ญํ ํ์์ด ์ผ์ด๋ฉ๋๋ค.
const a = 1;
a = 2;
const ๋ก ์ ์ธ๋ ๋ณ์๋ ๊ฐ์ ์ ๋ ์์ ํ ์ ์์์ต๋๋ค. a = 2; ๋ฅผ ์๋ํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์ค๋ฅ๊ฐ ๋ฉ๋๋ค.
๊ทธ๋ฐ๋ฐ const ๋ก ์ ์ธ๋ ๋ณ์์ ๊ฐ์ฒด๋ฅผ ๋ค์ ํ ๋นํ๋ฉด ์ค๋ฅ๊ฐ ์๊ธฐ์ง๋ง, ๊ทธ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ๋ ๊ฒ์ ๊ฐ๋ฅํฉ๋๋ค.
const mutableObj = {
name: '๊ฐ์ฒด'
};
mutableObj = {
name: '์์ '
}
๋ณ์ mutableObj ์์ฒด์ ๊ฐ์ฒด๋ฅผ ์ฌ ํ ๋นํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅ ํฉ๋๋ค. ์คํํด๋ณด๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์ค๋ฅ๊ฐ ๋ฉ๋๋ค.
mutableObj.name = '์์ ';
mutableObj.type = 'Object ํ์
';
๊ทธ๋ ์ง๋ง ํ๋กํผํฐ์ ์ ๊ทผํด์ ๋ด์ฉ์ ์์ ํ๊ฑฐ๋, ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์๋ฌ๊ฐ ๋์ง ์์ต๋๋ค.
โ Method (๋ฉ์๋)
๊ฐ์ฒด์ ์ ์ฅ๋ ๊ฐ์ด ํจ์์ผ ๋, ๋ฉ์๋๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
console.log();
console.log() ๋ ํํ๋ฅผ ๋ณด๋ ๊ฐ์ฒด์ธ๊ฐ ๋ด ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์ด๋์๋ ์ ๊ทผ์ด ๊ฐ๋ฅ ํ์ผ๋ global ๊ฐ์ฒด์ ๋๋ค. console ๋ค์์ dot(.)์ผ๋ก ํ๋กํผํฐ๋ฅผ ์ ๊ทผํ๊ณ , log ๋ผ๋ ํค์ ๊ฐ์ ํจ์์ธ ๊ฒ ๊ฐ์ต๋๋ค. log๋ console ์ด๋ผ๋ ๊ฐ์ฒด์ ๋ฉ์๋์ ๋๋ค. ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ค๋ฉด ์๋์ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
let methodObj = {
do: function() {
console.log('๋ฉ์๋ ์ ์๋ ์ด๋ ๊ฒ');
}
}
ํธ์ถ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค!
methodObj.do();
โ ์ค์ฒฉ๋ ๊ฐ์ฒด (Nested Object)
์ค๋ฌด์์ ์ฌ์ฉ๋๋ ๊ฐ์ฒด๋ ๊ฑฐ์ ์ค์ฒฉ๋์ด ์์ต๋๋ค. ํ๋กํผํฐ ๊ฐ์ด ๊ฐ์ฒด์ผ ์๋ ์๊ณ , ํ๋กํผํฐ ๊ฐ์ธ ๋ฐฐ์ด์ ์์๊ฐ ๊ฐ์ฒด์ผ ์๋ ์์ต๋๋ค.
let nestedObj = {
type: {
year: '2019',
'comment-type': [{
name: 'simple'
}]
}
}
์์์ 'simple' ์ ์ถ๋ ฅํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น์?
console.log(nestedObj.type['comment-type'][0].name);
์ปดํจํฐ๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํด์ํ ๋ค๋ ๊ฒ์ ๋ช ์ฌํ๊ณ ์ดํดํด์ฃผ์ธ์.
ํญ์ ์ผ์ชฝ์ ์ง์ ์ฝ๋๋ฅผ ์จ์ผ ํ๋ค๋ ๊ฒ์ ์์ง ๋ง์์ฃผ์ธ์!!
- nestedObj.type ๋ year, comment-type ์ด ์๋ ๊ฐ์ฒด์ ๋๋ค
- nestedObj.type['comment-type'] ๋ ์์ 1๊ฐ์ธ ๋ฐฐ์ด์ ๋๋ค.
- nestedObj.type['comment-type'][0] ์ฒซ ๋ฒ์งธ ์์์ธ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- nestedObj.type['comment-type'][0].name ๋๋์ด 'simple'์ ์ ๊ทผ!
โ ๊ฐ์ฒด๋ reference๋ก ์ ์ฅ๋๋ค.
์กฐ๊ธ ์ด๋ ค์ด ์ด์ผ๊ธฐ๋ฅผ ์์ํ๋ ค๊ณ ํฉ๋๋ค!
๊ฐ์ฒด๋ reference๊ฐ ์ ์ฅ๋ฉ๋๋ค.. ์ ๋ฌด์จ๋ง์ผ๊น์?
๊ฐ์ฒด๋ฅผ ๋ณ์์ ์ ์ฅํ๋ฉด ๊ฐ์ฒด ์์ฒด๊ฐ ์ ์ฅ๋๋ ๊ฒ์ด ์๋๋ผ reference๊ฐ ์ ์ฅ๋ฉ๋๋ค.
๋ฐ๋๋ก, ํ ์คํธ๋ ๋ณ์์ ์ ์ฅํ๋ฉด ํ ์คํธ ์์ฒด๊ฐ ์ ์ฅ๋ฉ๋๋ค. ๊ทธ๋์ ์๋ก ๊ฐ์ ํ ์คํธ๋ฅผ ๋น๊ต์ฐ์ฐ ํ๋ฉด ์๋ก ๊ฐ์ด ๊ฐ์ผ๋ฏ๋ก true ์ ๋๋ค.
const a = '์๋
';
const b = '์๋
';
console.log(a === b);
๊ทธ๋ฐ๋ฐ ์๋์ ๊ฐ์ฒด๋ ์๊ธด ๋ชจ์์ด ์์ ๋๊ฐ์๋ฐ false ๋ผ๊ณ ์ถ๋ ฅ๋ฉ๋๋ค.
const hiObj = {
name: '์๋
'
};
const helloObj = {
name: '์๋
'
};
console.log('๊ฐ์ฒด๋น๊ต =>', hiObj === helloObj);
๊ทธ ์ด์ ๋ ๊ฐ์ฒด๋ ๋ณ์์ ์ ์ฅํ ๋, ๊ฐ์ฒด ์์ฒด๋ฅผ ๊ทธ๋๋ก ์ ์ฅํ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ฐ์ฒด๊ฐ ๋ด๊ธด ์ด๋ ๋ฉ๋ชจ๋ฆฌ์ reference ๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
hiObj ๊ฐ ๊ฐ๊ณ ์๋ ์ง์ง ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ธ reference์ ๋๋ค. ํ์ง๋ง hiObj ๋ฅผ ๋ถ๋ฌ์ฌ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๋ฐํํ๋ ๊ฒ์ด ์๋๋ผ, ํด๋น ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํด ์ค๋๋ค.
๊ทธ๋์ ๋์ ๋ณด์ด๋ ๋ฐ์ดํฐ๋ ๋๊ฐ์ง๋ง, hiObj ์ helloObj ๊ฐ ๊ฐ๊ณ ์๋ ์ง์ง ๊ฐ์ ๋ค๋ฅธ ๊ฒ์ ๋๋ค.
console.log('๊ฐ์ฒด๋น๊ต =>', hiObj === helloObj);
console.log('๊ฐ์ฒด๊ฐ๋น๊ต =>', hiObj.name === helloObj.name);
๊ทธ๋์ ๊ฐ์ฒด๋ฅผ ๋ด์ ๋ณ์๋ฅผ ๋น๊ตํ๋ฉด ์๋ก ๊ฐ์ง ์๋ค๊ณ ๋์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ฒด ๋ด๋ถ์ ํ๋กํผํฐ ๊ฐ์ด ํ ์คํธ์ผ ๊ฒฝ์ฐ๋, ํ ์คํธ๋ฅผ ๋น๊ตํ๊ฒ ๋์ด ์๋ก ๊ฐ์ / ๋ค๋ฆ ์ฌ๋ถ๋ฅผ ํ๋จํ ์ ์์ต๋๋ค.
๋ค์ ํ ๋ฒ const ๋ก ์ ์ธ๋ ๊ฐ์ฒด๋ฅผ ๋ณผ๊น์.
const mutableObj = {
name: '๊ฐ์ฒด'
};
mutableObj = {
name: '์์ '
}
mutableObj.name = '์์ ๋ฉ๋๋ค!';
const ๋ก ์ ์ธ๋ ๋ณ์๋ ์ ๋ ๊ฐ์ด ๋ฐ๋๋ฉด ์ ๋๋๊ฑฐ ์์์ฃ ? ๊ทธ๋์ mutableObj ์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ํ ๋นํ๋ฉด ์ค๋ฅ๊ฐ ๋ฉ๋๋ค. ์๋๋ฉด ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(reference)๋ก ์์ ์ ์๋ํ๊ธฐ ๋๋ฌธ์ด์ฃ .
ํ์ง๋ง mutableObj.name ๋ก ํ๋กํผํฐ์ ์ ๊ทผํด์ ์์ ํ ์ ์์ต๋๋ค. mutableObj ๊ฐ ์ ์ฅ๋ reference๊ฐ ๋ฐ๋๋ ๊ฒ์ด ์๋๋ผ ๊ฐ์ฒด ๋ด๋ถ์ ํ๋กํผํฐ ๊ฐ์ด ์์ ๋๋ ๊ฒ์ด๋ผ ์์ ์ด ๋๋ ๊ฒ์ด์ ๋ต๋๋ค....
์ดํด๊ฐ ์ ๋๋ ๋ถ๋ถ์ด ์๋ค๋ฉด stackoverflow์ ๋ง์ด ๋ฌผ์ด๋ด์ฃผ์ธ์!
Assignment
getAnswer ํจ์๋ฅผ ๊ตฌํํด ์ฃผ์ธ์.
- getAnswer ํจ์๋ ์๋์ ๊ฐ์ฒด์์ '์๋ฌ๋' ๋ผ๋ ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
// Assignment
let myProfile = {
name: '๊น๊ฐ๋ฐ',
address: {
email: 'geabal@gmail.com',
home: '์์ํฌ'
},
'my favorite': {
food: [{
name: '์๋ฌ๋',
price: 3500
}, {
name: '์ผ๊ฒน์ด',
price: 15000
}],
hobby: ['์ถ๊ตฌ']
}
}
// getAnswer ํจ์๋ฅผ ํธ์ถํ๋ฉด
// '์๋ฌ๋'๊ฐ return ๋ ์ ์๋๋ก ํ๋กํผํฐ์ ์ ๊ทผํด์ ๋ฐํํด์ฃผ์ธ์.
function getAnswer() {
let whereIsSalad = myProfile['my favorite']['food'][0]['name'];
return whereIsSalad;
}
โ27. [es6] arrow function
โ ES6 = ECMA Script 2015
ES๋ ECMA Script์ ์ค์๋ง์ ๋๋ค. ECMA Script๋ JavaScript๋ฅผ ํ์คํ ์ํค๋ ค๊ณ ํ์ํ์ต๋๋ค.(ECMAScript (or ES) is a scripting-language specification standardized by Ecma International)
JavaScript์ ์ญ์ฌ๋ ์ ์ ๊น์ด์ง๊ณ , ๋ฌธ๋ฒ์ ๋ณด์์ด ํ์ํ๋ฉด์ ๋ฒ์ ๋ณ๋ก ๋ฌธ๋ฒ์ ํ์ฅ์ํค๊ณ ๋ธ๋ผ์ฐ์ ๋ ํน์ ๋ฒ์ ์ ๊ธฐ๋ฅ๋ณ๋ก ์ง์ํ ์ ์๋๋ก ES๊ฐ ๋ช ์ธ๋ฅผ ํ์ ํด์์ต๋๋ค.
์ฆ, ECMA Script๋ JavaScript๋ฅผ ํ์คํ์ํค๊ณ , ๊ท๊ฒฉํํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๊ฒ์ ๋๋ค.
ํ์ฌ๋ ES10 ๋ฒ์ ๊น์ง ๋์์ต๋๋ค. ์ฃผ๋ก ์ฐ์ด๋ ๊ฒ์ ES6์ธ๋ฐ, 6์ ๋ฒ์ ์ด๋ฆ์ด๊ณ ES 2015๋ผ๊ณ ๋ ํฉ๋๋ค. 2015๋ ์ ES6๋ฒ์ ์ด ์ต์ข ์ผ๋ก ๋์๊ธฐ ๋๋ฌธ์ด์ฃ . 1-2๋ ์ ๋งํด๋ ES6๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋์ด ๋ง์ง ์์์ง๋ง, ์ด์ ๋ ๋์ด์ ๋ฏธ๋ฃฐ ์ ์์ ๋งํผ ๋ง์ ์ฌ๋๋ค์ด ์ฐ๊ณ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐํธํ ๊ธฐ๋ฅ๋ ๋ง์ด ์๊ฒจ์ ES6๋ฅผ ๋ง์ด ํ์ฉํ๋ฉด ์ข์ต๋๋ค. ์์ฆ ES7๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์๋ค๋ ์ ์ฐจ ๋ค์ด๋๊ณ ์์ต๋๋ค.
ES6์๋ ์ ๋ง ํธ๋ฆฌํ ํจ์๋ค์ด ๋ง์ด ์๊ฒผ๊ณ , ์ฒ์๋ณด๋ ๋ฌธ๋ฒ๋ค๋ ๋ง์ด ์๊ฒผ์ต๋๋ค. ๊ทธ๋์ ES6๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๊ณต๋ถ๊ฐ ํ์ํฉ๋๋ค.
์ค๋ ๋ฐฐ์ธ ๊ฒ์ arrow function ์ ๋๋ค. ์ด ์ ์ ๋ฐฐ์ ๋ function์ ํํํ๋ ๋ฐฉ๋ฒ๊ณผ ์์ ํ ๋ฌ๋ผ์ก์ต๋๋ค. ๊ทธ๋ฌ๋ ์๊น์๋ง ๋ฐ๋ ๊ฒ์ด๋ ๋๋ฌด ์ด๋ ต๊ฒ ์๊ฐํ์ง ๋ง์์ฃผ์ธ์.
//ES5
function() {}
//ES6
() => {}
์ด๋ฆ์ด ์๋ ํจ์์ ๊ธฐ๋ณธ์ ์ธ ํํ์ ๋๋ค.
ES6์์๋ function์ด๋ผ๋ ํค์๋๊ฐ ๋น ์ง๊ณ ์๊ดํธ๋ง ๋จ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ => (arrow) ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
์ด๋ฆ์ด ์๋ ํจ์๋ฅผ ๋ง๋ค ๋๋ ์๋์ ๊ฐ์ต๋๋ค.
//ES5
function getName() {}
//ES6
const getName = () => {}
ํธ์ถํ ๋๋ ๋ ๋ค ๊ฐ์ต๋๋ค.
getName()
ES6๋ ํจ์๋ฅผ getName ์ด๋ผ๋ ๋ณ์์ ์ ์ฅ ํ๋ค์.
์ฌ์ค function(ํจ์)๋ ๋ณ์์ ์ ์ฅํ ์ ์๋ ํ๋์ ์์ ๋๋ค.
๊ทธ๋์ ES5 ์ผ ๋๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ณ์์ ์ ์ฅํ ์ ์์์ต๋๋ค.
//ES5
//Function Declaration
function getName() {}
//ES5
//Function Expression
const getName = function() {}
์ฐ์์๊ฐ ๋ค๋ฅผ ๋๊ฐ ์์ง๋ง, ํจ์๋ฅผ ์ ์ํ ๋๋ ์ผ๋จ ํธํ ๋ฐฉ๋ฒ์ผ๋ก ํด์ฃผ์ธ์.
์ธ์๋ ํ ๋ฒ ๋ฐ์๋ณด๊ฒ ์ต๋๋ค.
//ES5
const getName = function(name) {}
//ES6
const getName = (name) => {}
const getName = name => {}
์ธ์๊ฐ ํ๋์ผ ๋๋ ์๊ดํธ ์๋ต์ด ๊ฐ๋ฅํฉ๋๋ค.
์ธ์๊ฐ ๋ ๊ฐ์ผ ๋๋ ์๋ตํ ์ ์์ต๋๋ค.
//ES5
const getName = function(name, age) {}
//ES6
const getName = (name, age) => {}
์ด์ return ํ๋ ํจ์๋ฅผ ๋ณผ๊น์?
//ES5
function hi(text) {
text += 'ํ์ธ์';
return text;
}
//ES6
const hi = text => {
text += 'ํ์ธ์';
return text
};
๋ง์ฝ ํจ์๊ฐ ์คํ๋ด์ฉ์ด ๋ฑํ ์์ด return๋ง ํ๋ค๋ฉด return ํค์๋์ ์ค๊ดํธ๊ฐ ์๋ต๊ฐ๋ฅํฉ๋๋ค.
//ES5
function getName(name) {
return name;
}
//ES6
const hi = name => { return name };
const hi = name => name;
์ค๊ดํธ์ return๋ฌธ์ด ์๋ต๋ ๊ฒฝ์ฐ, ํ์ดํ ์ค๋ฅธ์ชฝ์๋ ๋ฆฌํด๋ **"๊ฐ"**๋ง ์ฐ์ฌ์ผ ํฉ๋๋ค.
๋ค๋ฅธ ์ฝ๋๊ฐ ๋ค์ด๊ฐ๋ฉด ์๋ฉ๋๋ค.
ํท๊ฐ๋ฆฌ๋์? ์์ ํ๋๋ง ๋ ๋ณด๊ฒ ์ต๋๋ค.
//ES5
function getFullName(first, family) {
return first + family;
}
//ES6
const hi = (first, family) => { return first + family };
const hi = (first, family) => first + family;
์ฌ๋ฌ๋ถ!
์์ง ์ ์ดํด๊ฐ ์ ๋๋ค๋ฉด, ์์ ์ฝ๋๋ฅผ ์ผ์ชฝ ์ฝ๋ ์ฐฝ์์ ๋ค์ ํ ๋ฒ ์์ฑํด์ฃผ์๊ณ ! ๊ตฌ๊ธ ๊ฒ์์ผ๋ก ๋ ๋ง์ ์์ ๋ฅผ ์ฐพ์์ ์คํํด๋ด์ฃผ์ธ์.
์ด๋ฒ ๋ ํ๋ฆฟ์ ์ฐ์ต์ฐฝ์ด์ด์ ์๋ฌด๊ฑฐ๋ ์์ฑํ๊ณ ์ค๋ฅ๊ฐ ๋๋ ๋ฌธ์ ๊ฐ ์๋ต๋๋ค.
Assignment
์ด๋ฒ assignment๋ ์๋์ฑ์ ์ด ์๋๋๋ค. ์์ฑํด์ ์ ์ถํ๋ฉด ์ฑ์ ํด๋๋ฆฌ๊ฒ ์ต๋๋ค.
1. function ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ํํ๋ welcome ํจ์๋ฅผ, ํ์ดํ ํจ์ ํํ์ผ๋ก ๋ฐ๊ฟ์ฃผ์ธ์.
2. ์ดํ, ํ์ดํ ํจ์๋ก ํํ๋ handleBio ํจ์๋ฅผ, function ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ํํ๋ ํจ์๋ก ๋ฐ๊ฟ์ฃผ์ธ์.
// function ์ฌ์ฉ
function welcome(name){
return "์๋
ํ์ธ์" + name
}
// ์๋์์ ๋ณํํด์ฃผ์ธ์!
const welcome2 = name => "์๋
ํ์ธ์" + name;
// ES6
const handleBio = (nickname, bio) => {
const user = {
nickname : nickname,
bio : bio,
}
return user;
}
// ์๋์์ ๋ณํํด์ฃผ์ธ์!
function handleBio(nickname, bio) {
const user = {
nickname : nickname,
bio : bio,
}
return user;
}
โ28. [es6] template literals, string method
โ template literals
ES6 ์์ ์ถ๊ฐ๋ ๋ฌธ๋ฒ์์ ํธํ ๊ฒ ์ค ํ๋๊ฐ template literal ์ ๋๋ค.
์๋ String์ ์์ฑํ ๋ ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํ์์ง๋ง,
const name = '๊น๊ฐ๋ฐ';
์ด์ back tick์ผ๋ก๋ string์ ๊ฐ์ ์ ์์ต๋๋ค.
const name = `๊น๊ฐ๋ฐ`;
๊ทธ๋ฆฌ๊ณ back tick ์ผ๋ก ๊ฐ์ธ๋ฉด ๊ทธ ์์ ๋ณ์๋ฅผ ๋ฃ์ด์ ํํํ ์ ์์ต๋๋ค.
const name = '๊น๊ฐ๋ฐ';
const hi = `์๋
ํ์ธ์. ์ ๋ ${name} ์
๋๋ค.`;
๋ณ์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ${} ์ผ๋ก ๋ณ์๋ฅผ ๊ฐ์ธ์ค์ผ ํฉ๋๋ค.
ES5 ํํ์์๋ ์ด๋ป๊ฒ ํ์์ฃ ?
const hi = '์๋
ํ์ธ์. ์ ๋ ' + name + ' ์
๋๋ค.';
์ด๋ ๊ฒ ํ์ด์ผ ํ์ต๋๋ค.
์ํฐ ์ฒ๋ฆฌ(๊ฐํ, break line)๋ ์ด๋ป๊ฒ ํด์ผํ๋์?
์๋์ ํํ์ด ๊ฐ๋ฅํ๊ฐ์?
์๋๋ ๋ฌธ๋ฒ ์ค๋ฅ์ ๋๋ค.
let detail = '์์ธํ
๋ณด์์ผ
์ด์๋ค';
console.log(detail);
์ง์ ์์ฑํด๋ณด์ธ์.
๋ฐ์ดํ๋ก ๊ฐ์ผ string์ ๊ฐํ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์ผ๋ฉฐ, ๋ฌธ๋ฒ ์ค๋ฅ์ ๋๋ค.
๋ฐ์ดํ๋ก ๊ฐ์ผ string์์ ๊ฐํ์ ํ๋ ค๋ฉด ์๋ ์๋์ฒ๋ผ ํด์ผํฉ๋๋ค.
let detail = '์์ธํ\n'+'๋ณด์์ผ\n'+'์ด์๋ค';
console.log(detail);
๊ทธ๋ฐ๋ฐ template literal์์๋ string์ ์ ๋ ฅํ๋๋ก ๊ฐํ์ด ๋ฉ๋๋ค.
let detail = `์์ธํ
๋ณด์์ผ
์ด์๋ค
๋ด์ฝ๋..`;
console.log(detail);
โ 28-2. string method
ES6์์ ์ถ๊ฐ๋ ๋ช ๊ฐ์ง ์ ์ฉํ string method๋ฅผ ์๊ฐํด ๋๋ฆฝ๋๋ค.
๊ทธ ๋์ string์์ ํน์ string์ ์ฐพ๊ธฐ ์ํด indexOf ๋ฅผ ์ฌ์ฉํ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด์ ์๋์ 3๊ฐ์ง method๊ฐ ์๊ฒผ์ต๋๋ค.
์ด๋ฆ ๊ทธ๋๋ก ๊ธฐ๋ฅ์ ํ์ ํ์๋ฉด ๋ฉ๋๋ค.
- startsWith
- endsWith
- includes
const email = 'yealee.kim87@gmail.com';
console.log(email.startsWith('ye'));
console.log(email.endsWith('com'));
console.log(email.includes('@gmail'));
๊ทธ๋ฆฌ๊ณ ํน์ ๋ฌธ์์ด์ ๋ฐ๋ณตํ๊ณ ์ถ์ผ๋ฉด repeat ํจ์๋ฅผ ์ฐ๋ฉด ๋ฉ๋๋ค.
'#'.repeat(3);
๋ ์์ธํ ๋ด์ฉ์
๐ ์๋ฐ์คํฌ๋ฆฝํธ ์คํธ๋ง
์์ ๊ผญ ๊ณต๋ถํ๊ณ ๋์ด๊ฐ์ฃผ์ธ์!
Assignment
handleEdit ํจ์๋ฅผ ๊ตฌํํด ์ฃผ์ธ์.
- ์ผํ๋ชฐ ํ์๊ฐ์ ์์ ํ ๋ฒ ์ฏค์ ์๋์ ๊ฐ์ ๋ฌธ๊ตฌ๋ฅผ ๋ณด์ จ์ ๊ฒ๋๋ค.์ด๋ฌํ ๋ฌธ๊ตฌ์์๋ ์ด๋ฆ ๋ถ๋ถ๋ง ๊ณ์ ๋ฐ๋๊ณ ๋๋จธ์ง ๋ถ๋ถ์ ๊ณ ์ ๋ฉ๋๋ค. ๊ทธ๋ผ, ์ด๋ฆ ๋ถ๋ถ์ ๋ณ์๋ก ๊ด๋ฆฌ ํ๊ฒ ์ฃ ?
ํ์ํฉ๋๋ค. ์์ฝ๋๋!
ํ์๊ฐ์
๊ธฐ๋
์ผ๋ก ์ฟ ํฐ์ ์ ๋ฆฝํด ๋๋ ธ์ต๋๋ค.
- ๊ทธ๋ ๋ค๋ฉด handleEdit ๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ํจ์๋ฅผ ๊ตฌํํด ๋ด ์๋ค.
- ์ด ํจ์๋ nickname, interests ๋ผ๋ ๋ string์ ์ธ์๋ก ๋ฐ์ต๋๋ค. nickname์ ์ ์ ์ ๋๋ค์์, interests ๋ ์ ์ ์ ๊ด์ฌ์ฌ๋ฅผ ์๋ฏธํฉ๋๋ค.
- interests ์๋ ์ฌ๋ฌ ๊ด์ฌ์ฌ๋ฅผ ์ ์ ์ ์์ต๋๋ค. ๊ทธ ๋ ๊ทธ ๊ด์ฌ์ฌ์ ๊ตฌ๋ถ์ ์ฝค๋ง(,)๋ฅผ ์ด์ฉํฉ๋๋ค.
- nickname ๊ณผ interests ๊ฐ ๋ฌธ์ ์์ด ์ ๋ค์ด์๋ค๋ฉด ์ ์ ์ ๋ณด๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด์ Object์ ์ด ์ ๋ณด๋ฅผ ๋ด์์ ๊ด๋ฆฌํ ๊ฒ๋๋ค.
- ์๋ฅผ ๋ค์ด ์ ๋ ฅ ๊ฐ์ด nickname = "๋๋น" , interests = "๋ฐฉํ์ถ,ํ ๋์ค,๋ฉ ๋๋ฆฌ๊ธฐ" ๋ผ๊ณ ํ์ ๋
- ์๋์ ๊ฐ์ Object๋ฅผ ๋ฆฌํดํ๋๋ก ๊ตฌํํด ์ฃผ์ธ์.
โ ๏ธ ์ฃผ์
- interests ๋ ๋ฐฐ์ด์ ๋๋ค.
- interests ๋ฅผ ์ ์ ๋ ์ฝค๋ง(,) ๋ค์ ์คํ์ด์ค๋ ์ง์์ฃผ์ธ์.
{
nickname: "๋๋น",
interests: ["๋ฐฉํ์ถ","ํ
๋์ค","๋ฉ ๋๋ฆฌ๊ธฐ"],
bio: "์ ๋๋ค์์ ๋๋น์
๋๋ค. ์ทจ๋ฏธ๋ ๋ฐฉํ์ถ,ํ
๋์ค,๋ฉ ๋๋ฆฌ๊ธฐ์
๋๋ค."
}
โ๏ธ ํ์ด
// ์๋์ ์ฝ๋๋ฅผ ์์ฑํด์ฃผ์ธ์.
const handleEdit = (nickname, interests) => {
if ((nickname != undefined) && (interests != undefined)){
const info = {
nickname,
interests: interests.split(','),
bio: `์ ๋๋ค์์ ${nickname}์
๋๋ค. ์ทจ๋ฏธ๋ ${interests}์
๋๋ค.`
};
return info;
}
}
โ29. array methods
arrow function์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ ๋๋ callback ํจ์๋ก ์ฌ์ฉํ ๋ ์ ๋๋ค.
callback ํจ์๋, ์ธ์๋ก ์ ๋ฌ๋๋ ํจ์๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
arrow function์ ์กฐ๊ธ ๋ ์ฐ์ตํ๊ธฐ ์ํด array์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ฌ์ฉ๋๋ map, forEach ๋ฉ์๋๋ฅผ ํจ๊ป ๋ณด๊ฒ ์ต๋๋ค.
- Array.map()
- Array.forEach()
์ ๋ง ๋ง์ด ์ฐ์ด๋ ๋ฉ์๋ ์ ๋๋ค!
โ Array.map()
map ๋ฉ์๋๋ ๋ฐฐ์ด์ ๋ฐ๋ณตํด์ฃผ๋๋ฐ,
callback ํจ์์์ returnํ ๊ฐ์ผ๋ก ๋งค(each) ์์๋ฅผ ์์ ํด ์ค๋๋ค.
map ๋ฉ์๋์ return ๊ฐ์ ์์ ๋ ๊ฐ์ผ๋ก ๋ค์ ์์ฑ๋ ๋ฐฐ์ด์ ๋๋ค.
์์ ์ค๋ช ์ด ์ ๋ถ์ด์ง๋ง, ๋ ์์ธํ ์์ ๋ฅผ ๋ณด๋ ค๋ฉด ์๋ ๊ธ์์ ๋ ๊ณต๋ถํ๊ฑฐ๋, ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
๐ JS Map Function
const arr = [1, 2, 3];
const squares = arr.map(x => x * x);
๋๋ฒ์งธ ์ค์์ map ๋ฉ์๋์ ์ธ์๋ก ๋์ด๊ฐ ํจ์๋ฅผ ์๋๋๋ก ํํํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
const squares = arr.map(function (x) {
return x * x;
});
Array ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ์์ ๊ฐฏ์ ๋งํผ ๋ฐ๋ณตํฉ๋๋ค.
๋ฐ๋ณตํ ๋๋ง๋ค ์คํํ ํจ์๋ฅผ parameter๋ก ์ ๋ฌํฉ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ด callback ํจ์์์ array์ ์์๋ฅผ ์ธ์(x)๋ก ๋ฐ์ต๋๋ค.
ํด๋น ์์๋ฅผ ์์ ํ๊ณ ์ถ์๋๋ก ๋ก์ง์ ๊ตฌํํ๊ณ returnํด์ฃผ๋ฉด,
ํด๋น index์ ์์๊ฐ return ๋ ๊ฐ์ผ๋ก ์นํ๋ฉ๋๋ค.
์ผ์ชฝ ์ฝ๋ ์ฐฝ์์ map ํจ์๋ฅผ ๋ค์ํ๊ฒ ํ ์คํธํด๋ด์ฃผ์ธ์.
โ Array.forEach()
forEach ๋ for ๋์ ์ฌ์ฉํ๋ ๋ฐ๋ณต๋ฌธ์ ๋๋ค.
map ๊ณผ์ ํฐ ์ฐจ์ด๋ forEach ํจ์ ์์ฒด๊ฐ return ํ๋ ๊ฒ๋ ์๋ฌด๊ฒ๋ ์๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฅ forEach ํจ์๋ฅผ ํ์ถํ๊ณ ์ถ์ ๋ return ์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
map ์ ์์๊ฐ ์์ ๋ ์๋ก์ด ๋ฐฐ์ด์ด return ๋์๋ค๋ฉด,
forEach ๋ ์๋ฌด๊ฒ๋ return ํ๋ ๊ฒ์ด ์์ต๋๋ค.
๊ทธ๋์ forEach ๋ก ์ ๋ฌ๋๋ callback ํจ์์์๋ returnํ๋ ๊ฒ์ด ์์ต๋๋ค.
forEach ๋ ๋จ์ง for ๋ฌธ ๋์ ์ฌ์ฉํ๋ ๋ฐ๋ณต method ์ ๋๋ค.
let startWithNames = [];
let names = ['a', 'ab', 'cbb', 'ada'];
names.forEach(el => {
if (el.startsWith('a')) {
startWithNames.push(el);
}
});
let hasC = false;
let arr = ['a', 'b', 'c', 'd'];
arr.forEach(el => {
if (el === 'c') {
hasC = true;
}
});
๋ง์ฝ forEach์์ ํ์ฌ index ๋ฅผ ์๊ณ ์ถ์ผ๋ฉด ๋ ๋ฒ์งธ ์ธ์๋ก ๋ฐ์ ์ ์์ต๋๋ค.
let idxOfC = -1;
let arr = ['a', 'b', 'c', 'd'];
arr.forEach((el, idx) => {
if (el === 'c') {
idxOfC = idx;
return;
}
});
Assignment
๋ ๋ฌธ์ ๋ชจ๋ map ๋ฉ์๋์ arrow function์ ์ฌ์ฉํด์ฃผ์ธ์.
Assignment 1. moreThan100 ํจ์๋ฅผ ๊ตฌํํด ์ฃผ์ธ์.
์ซ์๋ก ๊ตฌ์ฑ๋ ๋ฐฐ์ด์ ์ธ์๋ก ๋ฐ์ต๋๋ค.
100 ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด, true ๋ฅผ
100 ๋ณด๋ค ์์ผ๋ฉด false ๋ก ์์๋ฅผ ๋ณ๊ฒฝํ์ฌ, ์๋ก์ด ๋ฐฐ์ด์ return ํด์ฃผ์ธ์.
์๋ฅผ ๋ค์ด,
nums(input)๊ฐ
[100, 9, 30, 7]
์ด๋ผ๋ฉด
return์
[true, false, false, false]
Assignment 2. formatDate ํจ์๋ฅผ ๊ตฌํํด ์ฃผ์ธ์.
- ๋ ์ง๊ฐ ๋ด๊ธด ๋ฐฐ์ด์ ์ธ์๋ก ๋ฐ์ต๋๋ค.
- ๋ ์ง์ data type์ string์ด๋ฉฐ, ๋ณด๋ด๋ ๋ ์ง ํ์ ์ 'YYYY-MM-DD' ์ ๋๋ค.
- ํด๋น ๋ ์ง์ ํ์์ 'YYYY๋ MM์ DD์ผ' ๋ก ๋ฐ๊ฟ์, ์๋ก์ด ๋ฐฐ์ด์ return ํด์ฃผ์ธ์.
- ์๋ฅผ ๋ค์ด,
dates(input)๊ฐ
['2019-03-21', '2019-04-21', '2019-05-21']
์ด๋ผ๋ฉด
return์
['2019๋
03์ 21์ผ', '2019๋
04์ 21์ผ', '2019๋
05์ 21์ผ']
โ๏ธ ํ์ด
const.moreThan100 = nums => {
//[100, 9, 30, 7]
return nums.map((value) => {
return 100 <= value;
});
//[true, false, false, false]
}
const formatDate = dates => {
return dates.map(date => {
const splited = date.split("-"); //["2019", "03", "21"]
return `${year}๋
${month[1]}์ ${day[2]}์ผ`;
})
}
โ30. Object (3)
โ ๊ฐ์ฒด์ ํค๋ฅผ ๋ณ์๋ก ์ ๊ทผํ๊ธฐ
Object ๋๋ฒ์งธ ๊ฐ์์์, ๊ฐ์ฒด์ ํค๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด์ ํน์ ํค์ ๊ฐ์ ๊ฐ์ ธ์ค๋๊ฒ๋ ๊ฐ๋ฅํ์ง๋ง, ๋ฐ๋๋ก ๊ฐ์ฒด์ ํน์ ํค๋ฅผ ๋ง๋ค๊ณ ๊ฐ์ ํ ๋นํ๋๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค! information ์ด๋ผ๋ ๊ฐ์ฒด ํ๋๋ฅผ ๋ง๋ค์์ต๋๋ค.
const information = {
name: '๊น๊ฐ๋ฐ'
}
์ฌ๊ธฐ์ ํค ํ๋๋ฅผ ์์ฑํ๊ณ , ๊ทธ ํค์ ๊ฐ์ ํ ๋นํด์ฃผ๋ ค๊ณ ํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ํค์ ๊ฐ์ ๋ณ์๋ฅผ ํตํด ๋ฐ์์จ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น์?
const verb = 'developes'
const project = 'facebook'
verb์ ๊ฐ์ ํค๋ก ์ฌ์ฉํด์ผ ํ๊ณ , project์ ๊ฐ์ ๊ทธ ํค์ ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ค๊ณ ํ์๋
information[verb] = project // [A]
information.developes = 'facebook' // [B]
A์ ๊ฐ์ด ํ ๋น์ด ๊ฐ๋ฅํฉ๋๋ค. B์ ๋ฐฉ์์ผ๋ก๋ ํ ๋น์ด ๊ฐ๋ฅํ ์๋ ์๊ฒ ์ง๋ง, ์ด ๊ฒฝ์ฐ ํค์ ๊ฐ์ ํญ์ ์ ํด์ ธ ์๊ฒ ๋ฉ๋๋ค. ํ์ง๋ง A์ ๊ฐ์ ๋ฐฉ๋ฒ์ ๋ณ์ verb์ project๊ฐ ๊ฐ์ง๋ ๊ฐ์ ๋ฐ๋ผ ๋ค๋ฅธ ํค์ ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ง๋๊ฒ ๊ฐ๋ฅํด์ง๋๋ค.
โ ๊ฐ์ฒด ์ํํ๊ธฐ
์์ ๊ฐ์์์ ๊ฐ์ฒด๋ ์์๊ฐ ์๊ณ ํค๋ฅผ ํตํด์๋ง ์ ๊ทผํด์ผ ํ๋ค๊ณ ๋ฐฐ์ ์ต๋๋ค. ํ์ง๋ง ์ฌ๋ฌ๊ฐ์ง ์ด์ ๋ก ๊ฐ์ฒด์ ์๋ ๋ชจ๋ ํค์ ํ๋ฒ์ฉ ์ ๊ทผํด์ผํ๋ ์ฝ๋๋ฅผ ์จ์ผํ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น์? ๋คํํ๋ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ฒ๋ผ ์ํ๊ฐ ๊ฐ๋ฅํฉ๋๋ค!
๋ค๋ง ๋ฐฐ์ด๊ณผ ๋ค๋ฅด๊ฒ ๋ช ํํ๊ฒ ์ ํด์ง ์์๊ฐ ์๊ธฐ ๋๋ฌธ์, ์ด๋ค ์์์ ๋ฐ๋ผ ๊ฐ์ฒด์ ํค์ ์ ๊ทผํ๊ฒ ๋ ์ง ์ ์ ์์ต๋๋ค. ๋๋ฌธ์ ๊ฐ์ฒด์ ์ํ๋ "์์๊ฐ ๋ณด์ฅ๋์ง ์์ ์ํ" ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ๋ฐฐ์ด์ ์ํํ ๋ ๋ค์๊ณผ ๊ฐ์ for ๋ฌธ์ ์ฌ์ฉํ์์ฃ ?
const arr = ['coconut', 'banana', 'pepper', 'coriander']
for (let i = 0; i < arr.length; i++) {
console.log(arr[i])
}
์ด๋ฐ ๋ฐ๋ณต๋ฌธ์ ๋ฐฐ์ด์ด length ๋ผ๋ ํค๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์ธ๋ฑ์ค๋ฅผ ํตํด ๊ฐ ๋ฐฐ์ด์์์ ์ ๊ทผํ ์ ์์๊ธฐ ๋๋ฌธ์ธ๋ฐ์. ๊ฐ์ฒด๋ length ํค๊ฐ ๋ฐ๋ก ์ฃผ์ด์ ธ์์ง ์๊ณ , ์ธ๋ฑ์ค๋ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฐ์์ ๋ฐ๋ณต๋ฌธ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋์ ํฌ๊ฒ ๋๊ฐ์ง์ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฒด์ ๋ฐ๋ณต๋ฌธ ์์ฑ์ด ๊ฐ๋ฅํฉ๋๋ค!
โ Object.keys()
Object.keys ๋ฉ์๋๋ ์ด๋ค ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ํค๋ค์ ๋ชฉ๋ก์ ๋ฐฐ์ด๋ก ๋ฆฌํดํ๋ ๋ฉ์๋์ ๋๋ค. ๊ฐ์ฒด์ ๋ด์ฅ ๋ฉ์๋๊ฐ ์๋๋ผ ๊ฐ์ฒด ์์ฑ์์ธ Object ๊ฐ ์ง์ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋์ ๋๋ค. ์ฌ์ฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
const obj = {
name: 'melon',
weight: 4350,
price: 16500,
isFresh: true
}
Object.keys(obj) // ['name', 'weight', 'price', 'isFresh']
Object.keys ๋ฉ์๋๊ฐ ๋ฆฌํดํ๋ ๊ฐ์ ๋ฐฐ์ด์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฑธ๋ก ์ฐ๋ฆฌ๊ฐ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค!
const keys = Object.keys(obj) // ['name', 'weight', 'price', 'isFresh']
for (let i = 0; i < keys.length; i++) {
const key = keys[i] // ๊ฐ๊ฐ์ ํค
const value = obj[key] // ๊ฐ๊ฐ์ ํค์ ํด๋นํ๋ ๊ฐ๊ฐ์ ๊ฐ
console.log(value)
}
์๋ก์ด ES6 ๋ฌธ๋ฒ์์๋ Object.keys ์ธ์๋ ๋ง์ฐฌ๊ฐ์ง๋ก Object์์ฑ์์ ๋ฉ์๋์ธ Object.values, Object.entries ์ ๊ฐ์ ์๋งคํ๋ค์ด ์ถ๊ฐ๋์์ต๋๋ค. Object.values ๋ ๊ฐ์ฒด์ ํค๊ฐ ์๋ ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์ ๋ฆฌํดํฉ๋๋ค. Object.entries ๋ ๊ฐ์ฒด์ ํค์ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ง ๊ธธ์ด 2์ง๋ฆฌ ๋ฐฐ์ด๋ก ์ด๋ฃจ์ด์ง, ๋ฐฐ์ด์ ๋ฆฌํดํฉ๋๋ค. ๊ฐ ๋ฐฐ์ด์์ ์ธ๋ฑ์ค [0]์ ๊ฐ์ ๊ฐ๊ฐ์ ํค๋ฅผ, ์ธ๋ฑ์ค [1]์ ๊ฐ์ ํด๋น ํค์ ํด๋นํ๋ ๊ฐ์ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
const values = Object.values(obj)
// values === ['melon', 4350, 16500, true]
const entries = Object.entries(obj)
/*
entries === [
['name', 'melon'],
['weight', 4350],
['price', 16500],
['isFresh', true]
]
*/
Object.entries๊ฐ ์กฐ๊ธ ๋ณต์กํด๋ณด์ด๊ธด ํ์ง๋ง, Object.keys, Object.values, Object.entries ์ธ๊ฐ์ง ์ค์์ ์ ์ผ ์ ์ฉํ๊ฒ ์ฐ์ ๋๋ค. ๊ผญ ์์๋์ธ์.
โ for-in
๊ฐ์ฒด๋ฅผ ์ํํ๋ ๋๋ฒ์งธ ๋ฐฉ๋ฒ์ for-in ๋ฌธ์ ๋๋ค. ๋ฐ๋ณต๋ฌธ์ธ for๋ฌธ๊ณผ ๊ฐ์ ์ข ๋ฅ์ ๋ฌธ๋ฒ์ด์ง๋ง, ๊ฐ์ฒด์ ๋ฐฐ์ด์ ์ํด ํน๋ณํ ์กด์ฌํ๋, ES6 ์์ ์ถ๊ฐ๋ ๋ฌธ๋ฒ์ ๋๋ค. ์ด๊ฑด ๊ฐ์ฒด ์ํ ์ธ์๋, ์ผ๋ฐ์ ์ธ ๋ฐฐ์ด์ ์ํํ ๋๋ ์์ฃผ ์ ์ฉํ ์ ์๋๋ฐ์.
const arr = ['coconut', 'banana', 'pepper', 'coriander']
for (let i = 0; i < arr.length; i ++) {
console.log(i)
console.log(arr[i])
}
์์ ์์๋ก ๋ฑ์ฅํ์๋ ๋ฐฐ์ด์ ๋ฐ๋ณต๋ฌธ์ ๋๋ค. for๋ฌธ์ ๊ทธ๋์ ๋ง์ด ์จ๋ณธ ๋ถ๋ค์ด๋ผ๋ฉด, ๋ฐฐ์ด์ ๋ํ for๋ฌธ ์ ์ธ์ ์ฐ๋ for(let i = 0; i < arr.length; i ++) ์ด๋ฐ ๋ฌธ๋ฒ์ด ์์ฃผ ์์ฃผ ์ฌ์ฉ๋๋ ๋ฌธ๋ฒ์ด๋ผ๋๊ฑธ ์๊ณ ๊ณ์คํ ๋ฐ์. ์ด๊ฑธ ๊ฐ๋จํ๊ฒ ์ถ์ฝํ ๋ฌธ๋ฒ์ด ๋ฐ๋ก ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
for (let i in arr) {
console.log(i)
console.log(arr[i])
}
i๋ฅผ 0์ผ๋ก ์ด๊ธฐํํ๊ณ , ๋ฐฐ์ด์ ๊ธธ์ด์ ๋น๊ตํ๊ณ , i๋ฅผ 1์ฉ ์ฆ๊ฐ์ํค๋ ๋ฑ์ ์ฝ๋๋ฅผ ์๋ตํ ์ ์๊ฒ ๋ง๋ ES6 ๋ฌธ๋ฒ์ ๋๋ค. ์ด for-in ๋ฌธ์ ์ธ๋ฑ์ค์ ๊ฐ์ผ๋ก ๋ฌด์์ ํ ๋นํ๊ณ , ๋ฐ๋ณต๋ฌธ์ด ๋ช๋ฒ ๋์์ผ ํ ์ง๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง ๋ด๋ถ์์ ์๋์ผ๋ก ๊ฒฐ์ ํ๊ฒ ๋ฉ๋๋ค.
for-in ๋ฌธ์ ๋ฐฐ์ด๋ฟ ์๋๋ผ ๊ฐ์ฒด์์๋ ์๋ํ๋๋ก ๋ง๋ค์ด์ก๋๋ฐ์.
const obj = {
name: 'melon',
weight: 4350,
price: 16500,
isFresh: true
}
for (let key in obj) {
const value = obj[key]
console.log(key)
console.log(value)
}
์ด๋ ๊ฒ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ for-in ๋ฌธ์ ์ฌ์ฉํ๋ฉด, for-in ๋ฌธ์ ์ธ๋ฑ์ค์ ํด๋นํ๋ ๋ณ์๊ฐ, ์ซ์๊ฐ ์๋ ๊ฐ์ฒด์ ๊ฐ๊ฐ์ ํค์ ํด๋นํ๋ ๋ฌธ์์ด์ ํ ๋น๋ฐ๊ฒ ๋ฉ๋๋ค.
Assignment
์๋ ์ค๋ช ์ ์ฝ๊ณ getExamResult ํจ์๋ฅผ ๊ตฌํํ์ธ์.
์ธ์ scores ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ฒด์ ๋๋ค. ๊ฐ์ฒด์ ์์์ ๊ฐฏ์ ๋ฐ ํค์ ์ด๋ฆ๋ค์ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ๊ฐ์ฒด์ ๊ฐ์ ๋ค์ 9๊ฐ์ง ๋ฌธ์์ด ์ค์์ ํ๋๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- 'A+', 'A', 'B+', 'B', 'C+', 'C', 'D+', 'D', 'F'
{
'์ํ์์ํ๊ณ': 'C',
'๋
ผ๋ฆฌ์ ๊ธ์ฐ๊ธฐ': 'B',
'๋
์ผ๋ฌธํ์์ดํด': 'B+',
'๊ธฐ์ด์ํ': 'D+',
'์์ดํํ': 'C+',
'์ธ์ง๋ฐ๋ฌ์ฌ๋ฆฌํ': 'A+',
}
์ธ์ requiredClasses ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ฌธ์์ด๋ก ๋ ๋ฐฐ์ด์ ๋๋ค.
['์์ดํํ', '๊ธฐ์ด์ํ', '๊ณตํ์ํ', '์ปดํจํฐ๊ณผํ๊ฐ๋ก ']
๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋๋ก ํจ์๋ฅผ ๊ตฌํํด์ฃผ์ธ์.
- scores ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ํค๋ค์ ์๋ก์ด ๊ฐ์ฒด์ ํฌํจ๋์ด์ผ ํฉ๋๋ค. ๋จ, ๊ทธ ๊ฐ๋ค์ ๋ค์ ์๋ฆฌ์ ๋ฐ๋ผ ์ซ์๋ก ๋ฐ๋์ด ํ ๋น๋์ด์ผ ํฉ๋๋ค.
- A+ => 4.5
- A => 4
- B+ => 3.5
- B => 3
- C+ => 2.5
- C => 2
- D+ => 1.5
- D => 1
- F => 0
- requiredClasses ๋ฐฐ์ด์ ์์๋ก๋ ์กด์ฌํ์ง๋ง, scores์ ํค๋ก๋ ์กด์ฌํ์ง ์๋ ํญ๋ชฉ์ด ์๋ค๋ฉด, ํด๋น ์์๋ ์๋ก์ด ๊ฐ์ฒด์ ํค๊ฐ ๋๊ณ , ๊ฐ์ผ๋ก 0์ ๊ฐ์ ธ์ผ ํฉ๋๋ค. ์์์ ์์๋ก ๋ฌ์ฌ๋ ๊ฐ์ฒด์ ๋ฐฐ์ด์ด ์ธ์๋ก ๋ค์ด์๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ฒด๊ณผ ๋ฆฌํด๋ฉ๋๋ค. ์์๊ฐ ์์๋ ๋ค๋ฅผ์ ์์ง๋ง, ์ฑ์ ์ ๋ฌด๊ดํฉ๋๋ค.
{
'์ํ์์ํ๊ณ': 2,
'๋
ผ๋ฆฌ์ ๊ธ์ฐ๊ธฐ': 3,
'๋
์ผ๋ฌธํ์์ดํด': 3.5,
'๊ธฐ์ด์ํ': 1.5,
'์์ดํํ': 2.5,
'์ธ์ง๋ฐ๋ฌ์ฌ๋ฆฌํ': 4.5,
'๊ณตํ์ํ': 0,
'์ปดํจํฐ๊ณผํ๊ฐ๋ก ': 0,
}
// Assignment ๋ฐฉ๋ฒ1
const getExamResult = (scores, requiredClasses) => {
const result = {}
const list = {
"A+":4.5,
"A":4,
"B+":3.5,
"B":3,
"C+":2.5,
"C":2,
"D+":1.5,
"D":1,
"F":0
}
for(let key in scores){
result[key] = list[scores[key]];
}
const keys=Object.keys(result)
for(let i in requiredClasses){
if(!keys.includes(requiredClasses[i])){
result[requiredClasses[i]] = 0;
}
}
return result;
}
// Assignment ๋ฐฉ๋ฒ2
const getExamResult = (scores, requiredClasses) => {
const result = scores;
for(let key in result){
if(result[key] === "A+"){
result[key] = 4.5;
}
else if(result[key] === "A"){
result[key] = 4;
}
else if(result[key] === "B+"){
result[key] = 3.5;
}
else if(result[key] === "B"){
result[key] = 3;
}
else if(result[key] === "C+"){
result[key] = 2.5;
}
else if(result[key] === "C"){
result[key] = 2;
}
else if(result[key] === "D+"){
result[key] = 1.5;
}
else if(result[key] === "D"){
result[key] = 1;
}
else if(result[key] === "F"){
result[key] = 0;
}
}
requiredClasses.forEach((el) => {
if(result[el] === undefined){
result[el] = 0;
}
})
return result
}
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TIL :: code-kata-js / (2) (0) | 2022.05.25 |
---|---|
TIL :: code-kata-js / (1) (0) | 2022.05.24 |
TIL :: DOM + Event (0) | 2022.05.17 |
TIL :: JavaScript / replit. 21~24 (0) | 2022.05.17 |
TIL :: JavaScript / replit. 11~20 (0) | 2022.05.17 |