백엔드 단에서는 데이터베이스의 접근 모듈을 작성 할 때에 보통 클래스로 만들어서 쓴다. 프라이빗이나 퍼블릭 설정은 TS에서 지원해준다. 싱글톤 패턴으로 작성시 하나의 객체만을 생성하기 때문에 수 많은 요청이 들어와도 계속해서 무언가를 생성하거나, 동작하는게 아닌 한번의 생성된 객체를 재이용하여 오버로드를 줄일 수 있다.
constructor안에서는 비동기 문법을 사용 할 수 없다.
extends를 class 이름 옆에 붙여주면 상속받을 수가 있다. constructor안에 super는 확장받은 클래스의 생성자를 호출하는 문법이다.
class test {
constructor(name){
this.name = name
}
}
class test2 extends test {
constructor(name){
super(name)
}
}
static 메소드는 클래스를 인스턴스화 시키지 않아도 클래스 내부의 함수에 접근 할 수 있늠 명령어이다.
class test {
constructor(name){
this.name = name
}
static call(){
return this.name
}
}
// static 함수만 있는 클래스의 경우 constructor가 필요 없을 수 있다.
class test {
static call(name){
return name
}
}
test.call('hello');
node.js에 싱글톤 적용하기
class test {
constructor() {
if(!test.instance) {
this._cache = []
test.instance = this
}
return test.instance
}
}
const instance = new test()
Object.freeze(instance)
class에 적용한 함수에 *를 붙이면 제너레이터를 사용 할 수가 있다. 해당 함수 안에 yield를 선언하여 사용한다. 하지만 대부분 async를 선언하여 쓴다.
class test() {
constructor() {
this.init = init <- init 함수의 프라미스 패딩된 결과값
}
async init () { } // 최초 1회 실행
async tests () { await this.init() }
}
아래와 같이 팩토리 패턴을 이용하여 단 한번만 호출하는 비동기 클래스로 바꿀 수 있다.
class test() {
constructor() {
static async BUILD (settings) {
const config = await this.init(settings)
// 비동기 하고자 하는 작업들을 여기에 모두 써준다
return new test([config // 완료된 비동기 작업 값들을 넣어준다])}
}
async init() {}
async etc () {}
}
const tester = test.BUILD(settings) //비동기된 값을 가지고 있는 instance가 전달됨