class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
speak() {
console.log(`${this.name} : hello!`);
}
}
const kim = new Person('kim', 26);
console.log(kim.name); // kim
console.log(kim.age); // 26
kim.speak(); // kim : hello!
getter
: 프로퍼티를 읽으려고 할 때 실행
setter
: 프로퍼티에 값을 할당할 때 실행
class User {
constructor(firstName, lastName, age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
get age() {
return this._age;
}
set age(value) {
this._age = value < 0 ? 0 : value;
}
}
즉, this.age
가 getter
를 실행하고, = age
가 setter
를 실행한다.
stackoverflow - Why does my javascript getter/setter require underscores?
_
를 사용해 프로퍼티에 접근하고, getter를 호출하고, 다시 프로퍼티에 접근하고....
루프 문제를 해결한다.
class Experiment {
publicField = 2;
#privateField = 0;
}
class 자체에 할당됨. object에 상관없이 공통적으로 사용 가능
static
을 통해 어떤 클래스의 변수, 메소드 등에 접근을 통해 메모리 효율 관리가 가능하다.
class Article {
static publisher = 'abcd';
constructor(articleNumber) {
this.articleNumber = articleNumber;
}
static printPublisher() {
console.log(Article.publisher);
}
}
const article1 = new Article(1);
console.log(article1.publisher); // undefined
console.log(Article.publisher); // abcd
Article.printPublisher(); // abcd
extends
를 사용, 부모 클래스의 속성, 메소드를 상속받음.
오버라이딩을 통해 재정의 가능
부모의 속성, 메소드 호출 시 super
키워드 사용
class checking