디자인 패턴 - 싱글톤(singleton)패턴

종종2·2023년 8월 5일
0

싱글톤 패턴

디자인 패턴 중 싱글톤 패턴을 자바스크립트(JavaScript)로 코드로 구현해보면서 이해할 예정이다.

싱글톤 패턴이란 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴이다. 여러 개의 개별적인 인스턴스를 만드는 것이 아닌, 하나의 클래스를 기반으로 하나의 인스턴스를 만드는 데에 사용한다.

싱글톤 패턴의 장점

  • 하나의 인스턴스만 생성하기 때문에 생성 비용이 줄어든다.
    • 하나의 인스턴스만 만들기 때문에 데이터베이스에 주로 사용한다.
  • 전역접근이 가능하다. (장점이자 단점)

싱글톤 패턴의 단점

  • 의존성이 높아지기 때문에 테스트 코드에는 적합하지 않다.

설명

자바스크립트는 객체를 생성하면 같은 내용이라도 메모리의 주소 값이 달라 어떠한 객체와도 같지 않다.


let obj1 = {
	a : 1
}

let obj2 = {
	a :1
}

console.log(obj1 == obj2) // false
//싱글톤 패턴

class Singleton{

  constructor(){
  	if(!Singleton.instance){
    Singleton.instance = this; 
    }
    return Singleton.instnce;
  }
  getInstance(){
	return this.instance;
	}

}

const singleton1 = new Singleton();
const singleton2 = new Singleton();

console.log(singleton1 == singleton2)// true

위와 같이 singleton1 과 singleton2는 하나의 인스턴스를 가지게 된다.

하나의 인스턴스를 만들기 때문에 생성 비용을 절약할 수 있다.
실제로 데이터베이스에 사용하는 경우가 많다.


class Database{
 	constructor(){
    	if(!Database.instance){
         this.connect();
          Database.instance = this;
        }
    	return Database.instance;
    } 
  
  async connect() {
    try
    {
      Database.insatance = await mysql.createConnection({
     	host: 호스트이름,
        user: 유저이름,
       	passsowrd: 데이터베이스 비밀번호,
        database:  데이터베이스이름,
     
     });
      console.log("데이터베이스에 연결 성공!");
    } catch(err){
    	consol.log("데이터베이스에 연결 실패",err);
    }    
   	 
    return this.instance;
  }
  
}

const a = new Database();
const b = new Database();
console.log(a==b) //true

이런식으로 데이터베이스에 싱글톤 패턴을 적용해서 쿼리문을 사용하기도 한다.

profile
나 이현종

1개의 댓글

comment-user-thumbnail
2023년 8월 5일

좋은 글 감사합니다. 자주 방문할게요 :)

답글 달기