클래스는 객체를 생성하기 위한 템플릿이다. 자바스크립트는 원래 prototype이라는 것을 기반으로 생성했지만 ES5부터는 class라는 키워드로 클래스를 선언할 수 있다.
붕어빵 틀로부터 나오는 붕어빵을 생각하면 쉽다. 클래스로부터 객체가 되며 객체가 컴퓨터상의 메모리에 올라가게 되면 인스턴스가 된다.
메모리에 올라가는 과정을 인스턴스화라고 한다.
var student = {
name: 'Lee',
score: 90
};
// student에는 hasOwnProperty 메소드가 없지만 아래 구문은 동작한다.
console.log(student.hasOwnProperty('name')); // true
console.dir(student);
개체 초기화를 위한 메서드. class에는 constructor 한개만 가능.
class Rectangle {
constructor(height, width) {
this.height = height;
this.width = width; }
}
const p = new Rectangle();
※ 클래스로 객체를 만들때는 new로 만들어야한다.
클래스에 대한 정적 메서드 또는 속성을 정의하며 클래스의 인스턴스에서 호출이 불가하다.
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
static displayName = "Point";
static distance(a, b) {
const dx = a.x - b.x;
const dy = a.y - b.y; return Math.hypot(dx, dy);
}
}
static으로 선언시, 인스턴스에 묶여있지 않고 class 자체 내에서 호출되기 때문에 중복생성이 안된다.
static은 일종의 전역변수라 전역변수의 단점 일부를 가지고 있다.
하지만 전역변수와는 다르게 get, set 함수를 만들 수 있다.(전역변수보다는 조금 더 간접접근을 할 수 있다) 클래스에서 사용된다는 명시성을 가진다는 점 등이 다르다.
→ static으로 선언한 add라는 함수가 있을 때, add라는 함수를 사용하지 않아도 메모리가 할당된다.