체인의정석

javascript 정적 메소드 본문

개발

javascript 정적 메소드

체인의정석 2021. 7. 15. 15:11
728x90
반응형

class 안에 함수를 정의할 때 static으로 정적 메소드를 활용해보라는 피드백을 받았다.

원래는 constructor 안에 클래스 형태로 받아와서 함수를 세팅해주는 역할이 있지만 여기서는 클래스 형태로 받아와서 객체를 생성하는 기능과 json 형태로 받아와서 클래스로 만들어 주는 기능을 둘 다 사용하기로 하였다.

 

참고 링크

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Classes/static

 

static - JavaScript | MDN

static 키워드는 클래스의 정적 메서드를 정의합니다.

developer.mozilla.org

class ClassWithStaticMethod {

  static staticProperty = 'someValue';
  static staticMethod() {
    return 'static method has been called.';
  }

}

console.log(ClassWithStaticMethod.staticProperty);
// output: "someValue"
console.log(ClassWithStaticMethod.staticMethod());
// output: "static method has been called."

정적 메서드는 클래스의 인스턴스 없이 호출이 가능하며 클래스가 인스턴스화되면 호출할 수 없다.

한마디로 위와 같은 상황에서 constructor를 사용하지 않고도 인스턴스를 만들어 줄 때도 쓰일 수 있는 것이다.

 

정적 메서드는 동일한 클래스내에서 사용하게 될 경우 this를 사용하여 정적 메소드 내에서 다른 정적 메소드를 가져와서 쓸 수 도 있다.

class StaticMethodCall {
  static staticMethod() {
    return 'Static method has been called';
  }
  static anotherStaticMethod() {
    return this.staticMethod() + ' from another static method';
  }
}
StaticMethodCall.staticMethod();
// 'Static method has been called'

StaticMethodCall.anotherStaticMethod();
// 'Static method has been called from another static method'

그러나 정적 메서드가 비정적 메서드에서 키워드 this를 써서 직접적으로 접근할 수는 없다. 이러한 경우

CLASSNAME.STATIC_METHOD_NAME() 을 사용하거나 메서드를 생성자의 한 속성으로 constructor : this.constructor.STATIC_METHOD_NAME()를 이용한다.

class StaticMethodCall {
  constructor() {
    console.log(StaticMethodCall.staticMethod());
    // 'static method has been called.'

    console.log(this.constructor.staticMethod());
    // 'static method has been called.'
  }

  static staticMethod() {
    return 'static method has been called.';
  }
}

 

728x90
반응형
Comments