싱클톤 패턴(singleton pattern)

배기호 Notebook·2023년 7월 6일
0

CS공부

목록 보기
8/35

싱클톤 패턴(singleton pattern)은 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴이다. 하나의 클래스를 기반으로 여러 개의 개별적인 인스턴스를 만들 수 있지만 그렇게 하지 않고 하나의 클래스를 기반으로 단 하나의 인스턴스를 만들어 이를 기반으로 로직을 만드는데 쓰이며 보통 데이터베이스 연결모듈에 많이 사용한다.

장점

하나의 인스턴스를 기반으로 해당 인스턴스를 다른 모듈들이 공유하여 사용하기 때무에 인스턴스를 생성할 때 드는 비용이 줄어든다.
그렇기 대무에 "인스턴스생성에 많은 비용"이 드는 I/O 바운드 작업에 많이 사용한다.

단점

의존성이 높아지며 TDD(Test Driven Development)를 할 때 걸림돌이 된다. TDD를 할 때 단위 테스트를 주로 하는데, 단위 테스트가 서로 독립적이어야 하면 테스트를 어떤 순서로든 실행할 수 있어야한다.
하지만 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴이므로 각 테스트마다 '독립적인'인스턴스를 만들기 어렵다.

  • I/O 바운드 : 디스크 연결, 네트워크 통신, 데이터베이스 연결
  • 의존성이란 종속성이라고도 하면 A가 B에 의존성이 있다는 것은 B의 변경 사항에 대해 A 또한 변해야 된다는 것을 의미한다.
class Singleton {
	constructor() {
		if (!Singleton.instance) {
			Singletin.instance = this
		}
		return Singleton.instance
	}
	getInstance() {
		return this.instance
	}
}

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

일반적으로 server와 DB를 한 컨테이너 안에 두기보다 다른 컨테이너 안에 넣어 서비스를 구축한다.
이 경우 server에서 DB로 query를 보낼 때
DB에 connect를 하고 query 보내는 과정이 반복된다.
즉, query를 보내는 과정 마다 connect 하는 과정에서 많은 비용이 소모된다.

MySQL 사용 예로
mysql.createPool을 기반으로(pool 인스턴스를 기반으로)
connect를 수행 하고
모듈 A, B를 통해 query를 보낸다.(인스턴스를 공유한다.)

참고
인프런 강의 _ CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조대시보드

0개의 댓글