본문 바로가기

Backend/디자인 패턴

Revealing Constructor Pattern (공개 생성자 패턴)

JS 에서 객체를 생성하는 패턴 중 하나인 공개 생성자 패턴은 객체를 생성하는 시점에만 객체 내부의 동작 혹은 상태를 변경할 수 있도록 노출하는 패턴입니다.

 

const promise = new Promise((resolve, reject) => {
  ...
});

 

JS 에서 공개 생성자의 대표적인 예시는 Promise 입니다.

생성자의 인자로 함수를 받아들이는데 이러한 함수를 executor 라 하고, 객체의 내부 상태를 변경할 수 있는 resolve 와 reject 함수를 외부에 노출합니다. 이렇게 객체를 생성할 때만 resolve 와 reject 에 접근할 수 있고, 객체가 생성된 이후에는 다른 부분에서 resolve 와 reject 를 호출해 객체 내부 상태를 변경할 수 없습니다.

 

const fs = require('fs');
 
const promise = new Promise((resolve, reject) => {
  fs.readFile('tmp.txt', 'utf-8', (err, result) => {
    if (err) reject(err);
    else resolve(result);
  });
});

promise.then(result => {
  console.info(result);
}).catch(err => {
  console.error(err);
});

 

Promise 객체 생성의 간단한 예시입니다.

resolve 와 reject 함수는 내부 구현에 의해 fs 모듈에 의한 파일 읽기가 끝난 후 호출 되며 이렇게 생성된 promise 객체의 외부 어딘가에선 resolve, reject 를 호출할 수 없습니다.

 

공개 생성자패턴은 JS 내에서도 Promise 외에는 특별히 다른 예시를 찾기가 어렵습니다.

관련해서 읽어보면 좋을만한 글을 링크하며 마무리합니다.