클래스는 let, const와 같이 클래스 선언문 이전에 참조할 수 없다. 같은 이유이다.

constructor 는 인스턴스를 생성하고 클래스 필드를 초기화하기 위한 특수한 메소드이다. 클래스필드 생성에 이용됨 ( 클래스 필드란 this에 추가한 프로퍼티를 부른다)

// 클래스 선언문
class Person {
  // constructor(생성자). 이름을 바꿀 수 없다.
  constructor(name) {
    // this는 클래스가 생성할 인스턴스를 가리킨다.
    // _name은 클래스 필드이다.
    this._name = name;
  }
}

// 인스턴스 생성
const me = new Person('Lee');
console.log(me); // Person {_name: "Lee"}

constructor를 생략하고 class를 선언하여도 괜찮다. 빈 객체로 생성이 되기 때문에 인스턴스를 생성하고 동적으로 추가하면 된다.

// constructor는 인스턴스의 생성과 동시에 클래스 필드의 생성과 초기화를 실행한다.

클래스에선 constructor를 제외하고 메소드만 선언할 수 있다.

class Foo {
  name = ''; // SyntaxError

  constructor() {}
}

getter, setter

getter : 값을 반환함

setter : 값을 조작할 수 있음

정적메소드 (static)

stactic메소드

classs의 일반 메소드들은 생성된 인스턴스를 만들면 그 인스턴스의 주소 값을 가지지만 정적메소드들은 인스턴스를 만들어도 인스턴스 주소에 생성되지 않고 class 주소에만 존재한다.