[javascript] 클래스의 정적 속성과 정적 메서드의 이해

정적 속성과 정적 메서드는 클래스 인스턴스를 생성하지 않고도 호출할 수 있는 클래스에 정의된 속성과 메서드입니다.

인스턴스를 생성하지 않고 바로 호출할 수 있기 때문에 공통으로 사용하는 라이브러리 클래스를 생성해 사용할 때 주로 활용합니다.

정적 속성과 정적 메서드는 앞에 "static" 키워드를 사용해 정의합니다.

"static" 키워드로 정의한 속성과 메서드는 객체 인스턴스를 통하지 않고 호출되는 만큼 객체 constructor 메서드로 생성하는 동적 변수와 메서드에는 접근할 수 없습니다.

정적 속성과 메서드는 인스턴스를 생성하지 않고 접근할 수 있지만, 인스턴스를 통해서는 접근할 수 있습니다.

인스턴스에서 정적 메서드, 속성에 접근하면 에러가 발생합니다.

정적 메서드와 달리 정적 속성은 get;set; 으로 구현해야 하며, static get 키워드로 메서드를 선언해 값을 반환하는 형태로 구현해야 합니다.

마찬가지로 인스턴스에서는 접근이 안되며, 정적 메서드에서는 정적 속성을 접근할 수 있습니다.

class Basket {
  constructor(){
    this.products = [];
  };  //정적 변수 선언
  static get HOUR(){
    return 4;
  }  //정적 메서드 선언
  static dueTime(){    
    const deliverymsg = new Date().toISOString().substring(0,10)+' 오후 '+this.HOUR+'시 이전 주문 당일 발송';
    return deliverymsg;
  };
  addBasket(pid, productname, price, num){
    this.products.push({pid, productname, price, num});
  };
  deleteBasket(pid){
    const idx = this.products.findIndex(item=>item.pid == pid);
    if(idx){
      this.products.splice(idx,1);
    }
  };
 }
console.log(Basket.HOUR);
console.log(Basket.dueTime());
const b = new Basket();
console.log(b.dueTime());