본문 바로가기
Archive

class의 정적 메서드, 정적 프로퍼티

by livemehere 2022. 9. 3.

prototype이 아닌 함수 자체에 메서드를 설정할 수 있는데, 이를 정적 메서드라고 한다. (static method)

class User {
  constructor() {}
  static staticMethod() {
    console.log(this);
  }
  say() {
    console.log(this);
  }
}

console.log(User.prototype.constructor); // [class User]
console.log(User); // [class User]
User.staticMethod(); // [class User]

let u = new User();
User.prototype.say(); // {}
u.say(); // User {}

즉, 함수를 객체로서 보았을때 프로퍼티를 추가한 것이다.

아래와 같다.

클래스가 함수와 같고, 함수는 객체의 한 종류라는 점을 알고있으니, 이해가 잘 됬다.

class User {}

User.myStatic = function () {
  console.log(this);
};

User.myStatic();

팩토리 메서드

흔히 데이터베이스관련 클래스에서 볼 수 있었던 패턴이다.

class DataBase {
  constructor(value, date) {
    this.value = value;
    this.createdAt = date;
  }

  static create(value) {
    return new DataBase(value, new Date());
  }
}

let a = DataBase.create("A");
console.log(a); // DataBase { value: 'A', createdAt: 2022-09-03T11:28:44.193Z }

 

static 메서드와 프로퍼티는 상속이된다.

오버라이딩은 불가능하다.

class DataBase {
  static schema = "kongDB";

  constructor(value, date) {
    this.value = value;
    this.createdAt = date;
    this.schema = DataBase.schema;
  }

  static create(value) {
    return new DataBase(value, new Date());
  }
}

class MySql extends DataBase {
  static schema = "sqlDB";
}

console.log(MySql.create("hi"));
/*
 DataBase {
  value: 'hi',
  createdAt: 2022-09-03T11:33:04.698Z,
  schema: 'kongDB'
}
 */

 

언제써야할까?

인스턴스가아닌 클래스 전체에 필요한 기능을 만들때 사용할 수 있다.

반응형

'Archive' 카테고리의 다른 글

try ... catch 와 에러 핸들링  (0) 2022.09.04
내장 클래스 확장하기  (0) 2022.09.03
클래스 문법  (0) 2022.09.03
prototype 과 상속  (0) 2022.09.01
함수 바인딩  (0) 2022.09.01