Class
: 데이터가 들어있지는 않고, 어떤 데이터가 들어올 수 있다고 되어있는 틀. 한 번만 정의된다.
Object
class Person {
//constructor
constructor(name){
//fields
this.name = name;
}
//methods
spaek() {
console.log(`Welcome ${this.name}!`);
}
}
// object 생성
const hyun = new Person('hyun');
// 나이가 음수일 수는 없으니까, 음수일수 없음을 알려주거나 0으로 설정하자.
class Person {
constructor(age) {
this.age = age;
}
// constructor의 this.age가 getter를 호출
get age() {
return this._age;
}
// constructor의 this.age "= age" 값을 메모리에 할당할 때 setter를 호출
set age(value) {
//if (value < 0) {
// throw Error('age can not be negative');
//}
this._age = value < 0 ? 0 : value;
}
}
: constructor 없이 class field를 정의.
object에 넣어주는 데이터와는 상관없이, 공통적으로 class에서 사용할 때, 메모리를 절약할 수 있다.
class ClassWithStaticField {
static staticField = 'static field'
static baseStaticMethod() { return 'base static method output' }
}
상속: class를 확장시켜 동일한 것들을 재사용할 수 있다.
다형성: 상속을 받아와서 일부 변경시키거나 추가해서 사용할 수 있다.
class Rectangle extends Shape {}
super 키워드는 객체의 부모가 가지고 있는 메서드를 호출하기 위해 사용된다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Classes/Public_class_fields