클래스의 정적 메서드 정리
정적 메서드
클래스의 정적(static) 메서드는 인스턴스를 생성하지 않아도 호출할 수 있는 메서드를 말한다. 메서드에 static을 붙이면 정적 메서드가 된다.
class Person {
constructor(name) {
this.name = name;
}
// 정적 메서드
static sayHi() {
console.log('Hi~');
}
// 프로토타입 메서드
sayName() {
console.log(this.name);
}
}
클래스는 함수 객체이므로 자신의 프로퍼티/메서드를 소유할 수 있다.
즉, 정적 메서드는 인스턴스로 호출하지 않고 클래스로 호출한다.
// 정적 메서드는 클래스로 호출한다.
Person.sayHi(); // Hi~
// 정적 메서드는 인스턴스로 호출할 수 없다.
const me = new Person('kwon');
me.sayHi(); // TypeError: me.sayHi is not a function
정적 메서드 VS 프로토타입 메서드
- 둘은 자신이 속해 있는 프로토타입 체인이 다르다.
- 정적 메서드는 클래스로 호출하고, 프로토타입 메서드는 인스턴스로 호출한다.
(정적 메서드의 this는 클래스이며, 프로토타입 메서드의 this는 인스턴스다) - 정적 메서드는 인스턴스 프로퍼티를 참조할 수 없다.
더 알아두기
- this를 사용하지 않는 메서드는 정적 메서드로 정의하는 것이 좋다.
- 표준 빌트인 객체인 Math, Number, JSON, Object 등은 다양한 정적 메서드를 가지고 있다.
참고문헌
이웅모, “모던 자바스크립트 Deep Dive”, 위키북스, 2020, pp.430-433