ํด๋์ค๋ ๊ฒฐ๊ตญ { num: 1 } ์ฒ๋ผ ์๊ธด ๊ฐ์ฒด(object)๋ฅผ ์ ์ค๊ณํ๊ธฐ ์ํ ํ
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋, ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ค๋ก ๊ตฌ์ฑํ๊ณ , ๊ฐ์ฒด๋ค ๊ฐ์ ์๋ก ์ํธ ์์ฉ ํ๋๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ
(๋ง์ด ์ด๋ ต๋ค)
ํด๋์ค๋ก ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ์ธ์คํด์คํ
๋ผ๊ณ ๋ถ๋ฆ
์์ ํ๋๋ก ๋๋ด์.
class Car {
constructor(name, price) {
this.name = name;
this.price = price;
this.department = "์ ๋ฆ์ง์ ";
this.salesAmount = 0;
}
applyDiscount(discount) {
return this.price * discount;
}
addSales() {
this.salesAmount++;
}
} // car ๋ผ๋ ์ด๋ฆ์ ํด๋์ค๊ฐ ์๋ค.
const morning = new Car('Morning', 2000000);
console.log(morning); // ๊ทธ ํด๋์ค์๋ค๊ฐ ๋ชจ๋. 200๋ง ๋ฃ์ผ๋ฉด ์ด๋ฐ ๊ฐ์ฒด๊ฐ ๋์จ๋ค
console.log(morning.name); //๊ทธ ๊ฐ์ฒด์์ ์ด๋ฆ์ ์ ๊ทผํ๋ค. = Morning
console.log(morning.price); // ๊ฐ๊ฒฉ์ ์ ๊ทผํ๋ค = 2๋ฐฑ๋ง
const price = morning.applyDiscount(0.8);
console.log(price); //ํ ์ธ ๊ฐ๊ฒฉ
console.log(morning.salesAmount); // 0;
morning.addSales(); // ์ด ํจ์๋ฅผ ์ด๋ค. ์ด๊ฑฐ๋ ์์ ๊ฐ +1 ๋ง๋๋ ํจ์๋๊น
console.log(morning.salesAmount); // 1์ด ๋๋ค.
ํด๋์ค
๋ ๊ฐ์ฒด ๋ง๋๋ ๊ธฐ๊ณ
๊ฐ์ ๊ฑฐ๊ณ (์ค๊ณ๋),
๋ฐ์ดํฐ๊ฐ ์์ ํ์ง ์์์ ๊ทธ์์ฒด๋ก๋ ๊ฐ์ฒด๊ฐ ์๋๊ณ ๊ฐ ๋ฃ์ผ๋ฉด ๊ฐ์ฒด ๋๋ ๊ทธ๋ฐ๊ฑด๊ฐ๋ณด๋ค.
์๋ก์ด ์ธ์คํด์ค ๋ง๋ค ๋๋ง๋ค constructor()
์ด๋ค.
class ์ด๋ฆ์ ๋๋ฌธ์, CamelCase๋ก ์จ์ผ ํ๋ค.
constructor() ๋ฉ์๋๋ (name, price) 2๊ฐ์ ์ธ์๋ฅผ ๋ฐ์
์ด๋ ๊ฒ ํด๋์ค ๋ด์์ name, price์ ๊ฐ์ด ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ํ๊ฐ์ด์
class๋ด์ ์ปจํ
์คํธ์์ ์ด๋ ๊ณณ์์๋ ์ฌ์ฉํ ์ ์๋ ๋ณ์๋ฅผ ๋ฉค๋ฒ ๋ณ์
๋ผ๊ณ ๋ถ๋ฆ
๋ฉค๋ฒ ๋ณ์๋ this
ํค์๋๋ก ์ ๊ทผํฉ๋๋ค.
์ธ์คํด์ค๋ ํด๋์ค๋ฅผ ํตํด ์์ฑ๋,
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 ํ๋กํผํฐ์ ๊ฐ์์ ๊ฐ์ด ํ ๋น๋จ
๊ฐ์ฒด์ ์ ์ฅ๋ ๊ฐ์ด ํจ์์ผ ๋, ๋ฉ์๋(Methods) ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
class์ method๋ ๊ฐ์ฒด๋ ๋ฌธ๋ฒ์ด ๊ฐ์๋ฐ,
๋ค๋ฅธ์ ์ class๋ ํ๋กํผํฐ๋ง๋ค comma(,)๊ตฌ๋ถ ์ํด์ค๋ ๋๋ค
.
class์์ ๋ฉ์๋๋, ๊ฒฐ๊ตญ class๋ ์ฐ๊ด๋์ด ์์ด์ ์์ ์๋๊ฑฐ๋ผ,
this.ํ๋กํผํฐ๋ฅผ ์์ฉํด์ ๋ฆฌํด๊ฐ์ผ๋ก ๋ง์ด ์ด๋ค.
ํจ์ ์์์ this ๋ฅผ ์ฐ๋ ๊ฑด ํด๋น instance ๋ฅผ ๋งํ๋ค๋ ๊ฒ ์ง์ง ์ค์ํจ
let methodObj = {
do: function() {
console.log('๋ฉ์๋ ์ ์๋ ์ด๋ ๊ฒ');
}
} //
methodObj.do(); //ํธ์ถํ ๋๋ ์ด๋ ๊ฒ
์ด๋ฐ์์ผ๋ก ๋ฉ์๋๋ฅผ ์ ์ํ ์ ์๋ค.
class MyMath {
constructor(Num1, Num2){
this.Num1 = Num1;
this.Num2 = Num2; }
getNumber(){
let a = [ this.Num1 , this.Num2];
return a;
}
add( ){
return this.Num1 + this.Num2 ;
}
substract(){
return this.Num1 - this.Num2;
}
multiply(){
return this.Num1*this.Num2;
}
}
let kk = new MyMath(10,20);
console.log(kk); // MyMath { Num1: 10, Num2: 20 }
console.log(kk.add()); // 30
์ ์ ๋ฆฌํด๋์ ์์ ์์ฃผ๋ก ๋ณด๋ฉด ๋ค์ ๋ด๋ ์ดํด ์ฌ์
{}์ผ๋ก ์๊ธด ๋ชจ์์ ๊ฐ์ฒด๋ฅผ object literal(๊ฐ์ฒด ๋ฆฌํฐ๋ด) ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๊ฐ์ฒด๋ ๋ฐฐ์ด์ฒ๋ผ index๋ก ์ ๊ทผํ๋๊ฒ ์๋๋ผ, key ๋ก ์ ๊ทผํ๋ ๊ฑฐ๋ผ์ ์์๊ฐ ์ค์ํ์ง ์๋ค.
key
: property name
value
: property value
์ซ์๋ก ๋ key ๋ ๋๊ดํธ๋ก ์ ๊ทผํด์ผ ํ๋ค.
๊ฐ์ฒด๋ reference(์ปดํจํฐ ์ด๋ ๊ณต๊ฐ์ ๋ฉ๋ชจ๋ฆฌ) ๋ก ์ ์ฅ๋๋ค.
๊ฐ์ฒด๋ฅผ ๋ณ์์ ์ ์ฅํ๋ฉด, ๊ฐ์ฒด ์์ฒด๊ฐ ์ ์ฅ๋๋๊ฒ ์๋๋ผ reference
๊ฐ ์ ์ฅ๋๋ค.
๊ทธ๋์ ๋ณ์๋ a,b ๋น๊ตํ์ ๋, ๋ด์ฉ์ด ๊ฐ์ผ๋ฉด a === b ๊ฐ ๋์ง๋ง,
๊ฐ์ฒด๋ property value ๊ฐ์ด ๋ค ๊ฐ์๋ ์์ ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ๋๋ค
ํ์ง๋ง ๊ฐ์ฒด ๋ด๋ถ์ ๊ฐ์ ๊ฐ์ผ๋ฉด ๊ฐ๋ค๊ณ ๋์ด