
class 키워드를 사용해서 정의한다.
클래스명은 생성자함수와 마찬가지로 파스칼 케이스를 사용
class Person {}
또한 클래스는 표현식으로 정의할 수있다.
이는 클래스가 값으로 사용될 수 있다는 것이고, 일급 객체라는 것을 뜻한다.
클래스가 일급 객체로서 가지는 특징
- 무명의 리터럴로 생성할 수 있다.
- 변수나 자료구조에 저장할 수 있다.
- 함수의 매개변수에게 전달할 수 있다.
- 함수의 반환값으로 사용할 수 있다.
class Person {
// 생성자
constructor(name) {
this.name = name;
}
// 프로토타입 메서드
sayHi() {
console.log(`Hi My name is ${this.name}`);
}
// 정적 메서드
static sayHello() {
console.log('Hello!');
}
}constructor(생성자), 프로토타입 메서드, 정적 메서드 세 가지이다. 인스턴스를 생성하고 초기화하기 위한 특수한 메서드.
constructor 내부의 this는 생성자 함수의 것과 마찬가지로 클래스가 생성한 인스턴스를 가리킨다.
// 클래스
class Person {
constructor(name) {
// 인트턴스 생성 및 초기화.
this.name = name;
}
}
// 생성자 함수
function Person(name) {
this.name = name;
}
constructor은 메서드로 해석되지 않는다.
또한 생략될 수 있고, 자동으로 빈 constructor에 의해 빈 객체를 생성한다.
class Person {
constructor() {}
}
const me = new Person();
console.log(me); // Person {}

생성자 함수에서는 정적 메서드를 호출하기 위해서는 명시적으로 생성자 함수에 메서드를 추가해야 한다.
function Person(name) {
this.name = name;
}
// 정적 메서드
Person.sayHi = function () {
console.log('Hi!');
};
// 정적 메서드 호출
Person.sayHi(); // Hi!
클래스에서는 메서드에 static 키워드를 붙이면 정적 메서드가 된다. class Person {
// 생성자
constructor(name) {
this.name = name;
}
// 정적 메서드
static sayHi() {
console.log('Hi!');
}
}Person.sayHi(); // Hi!결국 정적 메서드를 이용하는 이유는 클래스 또는 생성자 함수를 하나의 네임스페이스로 사용하며,
정적 메서드를 모아 놓아 이름 충돌가능성을 줄이고, 관련 함수를 구조화 할 수 있는 효과가 있다.