정적 메서드

클래스의 정적(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 프로토타입 메서드

  1. 둘은 자신이 속해 있는 프로토타입 체인이 다르다.
  2. 정적 메서드는 클래스로 호출하고, 프로토타입 메서드는 인스턴스로 호출한다.
    (정적 메서드의 this는 클래스이며, 프로토타입 메서드의 this는 인스턴스다)
  3. 정적 메서드는 인스턴스 프로퍼티를 참조할 수 없다.

더 알아두기

  • this를 사용하지 않는 메서드는 정적 메서드로 정의하는 것이 좋다.
  • 표준 빌트인 객체인 Math, Number, JSON, Object 등은 다양한 정적 메서드를 가지고 있다.

참고문헌

이웅모, “모던 자바스크립트 Deep Dive”, 위키북스, 2020, pp.430-433