728x90
안녕하세요 이번시간에는 디자인 패턴 중 하나인 싱글톤 패턴을 자바스크립트에서 구현해보겠습니다.
1. 싱글턴 패턴이란?
싱글턴 패턴은 소프트웨어 디자인 패턴 중 하나로, 클래스의 인스턴스가 하나만 생성되도록 보장하고, 그 인스턴스에 쉽게 접근할 수 있도록 하는 패턴입니다.
2. 자바스크립트에서의 싱글톤 패턴 구현
구현은 DB커넥터를 싱글톤 패턴을 사용하는
2.1 CommonJS
// dbConnector.js
const mysql = require('mysql'); // MySQL 라이브러리를 가져옵니다.
require("dotenv").config(); // 환경 변수를 로드합니다.
let instance = null; // 싱글턴 인스턴스를 저장할 변수
class DbConnector {
constructor() {
if (!instance) { // 인스턴스가 존재하지 않는 경우
// MySQL 연결 설정
this.connection = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE
});
// MySQL에 연결합니다.
this.connection.connect(err => {
if (err) {
console.error('Database connection error:', err);
return;
}
console.log('Database connected!');
});
instance = this; // 현재 인스턴스를 저장합니다.
}
return instance; // 인스턴스를 반환합니다.
}
// SQL 쿼리를 실행하는 메서드
query(sql, args) {
return new Promise((resolve, reject) => {
this.connection.query(sql, args, (err, rows) => {
if (err) {
return reject(err); // 에러 발생시 reject
}
resolve(rows); // 결과 반환
});
});
}
}
module.exports = DbConnector; // DbConnector 클래스를 내보냅니다.
2.2 ES6
// dbConnector.js
import mysql from 'mysql'; // MySQL 라이브러리를 가져옵니다.
import { config } from 'dotenv'; // dotenv 라이브러리에서 config 함수를 가져옵니다.
config(); // 환경 변수를 로드합니다.
let instance = null; // 싱글턴 인스턴스를 저장할 변수
class DbConnector {
constructor() {
if (!instance) { // 인스턴스가 존재하지 않는 경우
// MySQL 연결 설정
this.connection = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE
});
// MySQL에 연결합니다.
this.connection.connect(err => {
if (err) {
console.error('Database connection error:', err);
return;
}
console.log('Database connected!');
});
instance = this; // 현재 인스턴스를 저장합니다.
}
return instance; // 인스턴스를 반환합니다.
}
// SQL 쿼리를 실행하는 메서드
query(sql, args) {
return new Promise((resolve, reject) => {
this.connection.query(sql, args, (err, rows) => {
if (err) {
return reject(err); // 에러 발생시 reject
}
resolve(rows); // 결과 반환
});
});
}
}
export default DbConnector; // DbConnector 클래스를 내보냅니다.
3. 결론
const DbConnector = require('./dbConnector');
const db1 = new DbConnector();
const db2 = new DbConnector();
console.log(db1 === db2); // true
// 두 인스턴스는 동일하므로 두 객체에서 동일한 DB 연결을 사용하게 됩니다.
싱글턴 패턴을 활용하면, 특히 DB 연결과 같이 공유 리소스를 사용하는 경우 중복 연결을 피하고, 리소스 사용을 최적화할 수 있습니다. 자바스크립트에서는 CommonJS 또는 ES6 모듈 시스템을 활용하여 싱글턴 패턴을 구현할 수 있습니다.
'JavaScript' 카테고리의 다른 글
[JavaScript] Phaser 객체에 애니메이션 적용하기 (0) | 2023.10.24 |
---|---|
[javascript] 분할 슬라이드 만들기 (0) | 2023.10.18 |
[JavaScript] 네이버 Map API 커스텀 마커 구현하기 (0) | 2023.10.06 |
[JavaScript] 카카오 Map API 키워드로 장소검색하기 (0) | 2023.09.27 |
[JavaScript] 브라우저에서 동작하는 지뢰찾기 만들기 - 기본편 (0) | 2023.09.22 |