백엔드 단에서는 데이터베이스의 접근 모듈을 작성 할 때에 보통 클래스로 만들어서 쓴다. 프라이빗이나 퍼블릭 설정은 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가 전달됨