[node.js] javascript 정적처리 / static factory method

Hyo Kyun Lee·2021년 7월 28일
0

node.js

목록 보기
25/34

1-1. 정적처리

javascript에서의 정적처리는 두가지 상황이 존재한다.

.png, .jpg 등 배경화면 구성 및 인터페이스 구성을 위해 이미지 파일 등을 사용하는 경우

class 및 객체에서 별도의 new 선언없이 바로 접근하여 사용할 수 있는 경우

1-2. static method

class ref{
  static staticMethod(){
    console.log("hello this is static method")
  }
}

ref.staticMethod();
//hello this is static method

class 내부의 메소드를 접근해야할 때는 먼저 class를 new를 통해 객체생성을 해줘야 한다.

예를 들어 위 코드의 경우 ref class 내부의 staticMethod 메소드를 접근하고자 할땐
const Ref = new ref 방식으로 class 객체를 먼저 생성해줘야 한다.

하지만 내부에서 static method로 처리되었을 경우엔 new를 통한 객체생성없이
바로 내부의 method에 접근할 수 있다.

즉, ref.staticMethod() 와 같이 해당 메소드를 바로 사용할 수 있다.

2. static factory method pattern

말 그대로 생성자를 사용하지 않고,
static method를 사용하여 인스턴스화 하는 디자인 패턴

factory, 즉 공장처럼 하나의 객체를 이용하여 반복적으로 반환하여 reuse할때 static method가 매우 편리하게 활용된다.

이 staic method를 사용하는 시점은 보통 constructor(), 즉 생성자를 여러번 반복적으로 사용하여 새로운 객체를 계속 생성하는 번거로움 등을 해소하고자 할 때이다.

static factory method는 기존 생성자를 사용하는 것에 대한 몇가지 특징이 존재하는데, 이러한 이점을 보고 static method를 사용하는 것이 더 좋을지 잘 판단해야 한다.

  • constructor()는 class의 이름과 동일하기 때문에, 인자만 다른 경우 등에 대한 구분이 어렵다. 하지만 static method를 통해 생성자를 선언하면 이름을 통해 구분이 가능하고, 내부적으로 객체를 생성해서 이를 반환도 할 수 있다.

  • 기존 class 생성시 new를 이용해 여러 객체를 별도로 만들어야 했던 것과 달리, 객체를 매번 생성하지 않아도 된다. 이는 동일한 객체가 요청되는 일이 잦을 경우 static을 통해 하나의 객체로 반복적으로 반환하여 활용할 수 있다.

  • static으로만 구성된 class는 생성자가 없어 extends, 확장이 불가능하다.

  • 기본적으로 생성자를 통한 return 할 수 있는 값은 존재하지 않고(자기 자신만 binding하여 내주기 때문), 다른 method를 이용하여 새로운 객체를 return할 수는 있다. 반면 static을 통해서는 다른 객체를 바로 return할 수 있다.

※ 코드예시는 아래 링크를 참조하자.

3. static method를 통해 비동기처리를 사용하는 이유와 방법

constructor(생성자) 내부에서는 this binding 시 async - await과 같은 비동기 처리가 불가능하다.

class를 통한 비동기처리는 보통 DB lifecycle에 활용되며, DB초기화 - DB반환 등 순차실행을 확보하는 것이 중요할 때 static method을 이용한다.

const settings = {};

class DatabaseManager {
  constructor() {}
  query() {}
  static async BUILD(config) {
    const CONFIG = await this.init(config); //DB초기화
    //초기화후 config 인자를 받아 온전한 DB 반환
    return new DatabaseManager(CONFIG);
    //singleton pattern .. parameter를 바꾼 동일한 객체를 반복적으로 반환할 때 static 활용
  }

  async init() {}

  newMember() {}
}

const manager = DatabaseManager.BUILD(settings);

위 코드 예시처럼, class를 DataBase 객체를 참조하고, 이 DB를 초기화 및 반환하기 위한 비동기처리가 필수적일때 static method를 통해 logic을 처리한다.

또한 static method를 통한 인스턴스를 생성 시, caching이 가능해져 최초 호출시에만 로딩이 걸리고 이후엔 빠른 접근이 가능하다.

위 예시처럼 동일한 객체(DB)에 대해 parameter만 바꾼 상태로 지속적인 반환이 필요할 때, static method를 활용하여 반환하면 기존 class 생성보다는 유리한 성능을 확보할 수 있을 것이다.

4. 참조링크

static method의 특징
https://ifcontinue.tistory.com/1

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

0개의 댓글