class ํด๋์ค๋ช
{
์์ฑ์์ ์ ์
ํ๋กํผํฐ์ ์ ์
๋ฉ์๋์ ์ ์
} // class ๋ช
๋ น
๋ฉ์๋๋ช
(์ธ์, ...) {
๋ฉ์๋์ ๋ณธ์ฒด
} // ๋ฉ์๋ ์ ์
constructor() {
this.ํ๋กํผํฐ๋ช
= ๊ฐ
} // ์์ฑ์ ์ ์
*์์*
class Member {
//์์ฑ์
constructor(firstName, lastName){
this.firstName = firstName;
this.lastName = lastName;
}
//๋ฉ์๋
getName() {
return this.lastName + this.firstName;
}
}
let m = new Member('์์จ', '์ ');
console.log(m.getName()); //๊ฒฐ๊ณผ : ์ ์์จ
๐น this
๐นํด๋์ค๋ function ์์ฑ์์ ๋ค๋ฅด๋ค.
let m = Member('์์จ', '์ ');//new ์ฐ์ฐ์๊ฐ ์๋ค
//๊ฒฐ๊ณผ : Class constructor Member cannot be invoked without 'new'
let m = new Member('์์จ', '์ ');
// ๊ฒฐ๊ณผ : Member is not defined
class Member{ ...์๋ต...}
๐นํ๋กํผํฐ ์ ์ํ๊ธฐ
get ํ๋กํผํฐ๋ช
{
๊ฐ์ ์ทจ๋ํ๊ธฐ ์ํ ์ฝ๋ // ๊ฐ return
}
set ํ๋กํผํฐ๋ช
(value) {
๊ฐ์ ์ค์ ํ๊ธฐ ์ํ ์ฝ๋ // ๊ฐ ์ค์
}
class Member {
//์์ฑ์
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
//firstName ํ๋กํผํฐ
get firstName() {
return this._firstName;
}
set firstName(value) {
this._firstName = value;
}
//lastName ํ๋กํผํฐ
get lastName() {
return this._lastName;
}
set lastName(value) {
this._lastName = value;
}
getName() {
return this.lastName + this.firstName;
}
}
let m = new Member('์์จ', '์ ');
console.log(m.getName());//๊ฒฐ๊ณผ : ์ ์์จ
: getter๋ฅผ ์ ์ํ๋ ์๊ฐ this.firstName๋ getter๋ฅผ ํธ์ถ
setter๋ฅผ ์ ์ํ๋ ์๊ฐ '= firstName' ๊ฐ์ ํ ๋น ํ ๋ setter๋ฅผ ํธ์ถ
๊ทธ ๋ง์, ์ ๋ฌ ๋ value๋ฅผ this.firstName์ ํ ๋น ํ ๋ ๋ค์ setter๋ฅผ ํธ์ถ ์ฆ, ๋ฌดํ์ ๋ฐ๋ณต = call stack size exceeded ์๋ฌ๊ฐ ๋ฌ๋ค.
โก getter์ setter์์ ๋ณ์๋ฅผ '_'๋ฅผ ์ด์ฉํ์ฌ ๋ง๋ค์ด์ผ ํ๋ค.
๐น์ ์ ๋ฉ์๋ ์ ์ํ๊ธฐ(static)
class Area {
static getTriangle(base, height) {
return base * height / 2;
}
}
console.log(Area.getTriangle(10, 5));// ๊ฒฐ๊ณผ : 25
๐น๊ธฐ์กด ํด๋์ค ๊ณ์นํ๊ธฐ
class Member {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
getName() {
return this.lastName + this.firstName;
}
}
//Member ๊ฐ์ฒด๋ฅผ ๊ณ์นํ BusinessMember ํด๋์ค๋ฅผ ์ ์
class BusinessMember extends Member {
work() {
return this.getName() + '์ ๊ณต๋ถํ๊ณ ์์ต๋๋ค.';
}
}
let bm = new BusinessMember('์์จ', '์ ');
console.log(bm.getName());
console.log(bm.work());
๐น๊ธฐ๋ณธ ํด๋์ค์ ๋ฉ์๋ / ์์ฑ์ ํธ์ถํ๊ธฐ - super ํค์๋
super (args, ...) // ์์ฑ์
super.method (args, ...) // ๋ฉ์๋
//Member ํด๋์ค์ ์ ์๋ ์์ฑ์/getName ๋ฉ์๋๋ฅผ BusinessMember ํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋ ํ๋ ์์
class Member {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
getName() {
return this.lastName + this.firstName;
}
}
//Member ๊ฐ์ฒด๋ฅผ ๊ณ์นํ BusinessMember ํด๋์ค๋ฅผ ์ ์
class BusinessMember extends Member {
// ์ธ์๋ก clazz๋ฅผ ์ถ๊ฐ
constructor(firstName, lastName, clazz) {
super(firstName, lastName);
this.clazz = clazz;
}
// ์ง์ฑ
ํฌํจ์ ์ด๋ฆ์ ๋ฐํํ๋๋ก ์์
getName() {
return super.getName() + '๏ผ์ง์ฑ
:' + this.clazz;
}
}
let bm = new BusinessMember('์ฑ๋ฃก', '๊น', '๊ณผ์ฅ');
console.log(bm.getName());// ๊ฒฐ๊ณผ : ๊น์ฑ๋ฃก / ์ง์ฑ
: ๊ณผ์ฅ```