카테고리 없음

싱글톤 패턴

아밍나 2022. 9. 17. 00:54
728x90

싱글톤 패턴(Singleton Pattern)

하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴.

데이터베이스 연결 모듈에 많이 사용. 

ex) MongoDB 데이터베이스를 연결할 때 쓰는 mongoose 모듈

      → mongoose의 connect() 함수는 싱글톤 인스턴스를 반환한다.

      MySQL 데이터베이스 연결

 

- 장점: 인스턴스 생성 비용 줄어듦.

           → 하나의 인스턴스를 만들어 놓고 다른 모듈들이 해당 인스턴스를 공유하며 사용한다.

- 단점: 의존성이 높아짐.

           ex) 테스트가 서로 독립적이어야 하는 단위 테스트에 걸림돌이 됨.

           모듈간의 결합을 강하게 만듦.

           → 의존성 주입으로 해결 가능.

더보기

의존성 주입(DI, Dependency Injection) = 디커플링(모듈 간 결합도를 낮춤)

하나의 객체가 다른 객체의 의존성을 제공.

상위 모듈이 하위 모듈에게 직접적으로 의존성을 주입하는 것이 아닌, 중간에 의존성 주입자(dependency injector)를 두어 상위 모듈이 하위 모듈에게 간접적으로 의존성을 주입하게 함.

- 장점: 모듈을 쉽게 교체할 수 있어 test 하기 쉽다. 모듈 간 관계가 명확해진다.

- 단점: 모듈이 분리되므로 클래스 수가 늘어나 복잡성이 증가될 수 있다.

 

의존성 주입 원칙

: 상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 한다.

  상위 모듈과 하위 모듈은 추상화에 의존해야 한다.

  추상화는 세부 사항에 의존하지 말아야 한다.

자바스크립트의 싱글톤 패턴

① 리터럴 {} 또는 new Object를 사용한 객체 생성 자체만으로 싱글톤 패턴 구현 가능.

const obj1 = {
	year : 2022
};
const obj2 = {
	year : 2022
};
console.log(obj1 === obj2); //false

→ obj1과 obj2는 다른 인스턴스를 가진다.

 

하나의 인스턴스를 가지는 클래스를 구현하여 싱글톤 패턴 구현 가능.

class Singleton {
    constructor() {
    	if (!Singleton.instance) {
        	Singleton.instance = this;
        }
        return Singleton.instance;
    }
    getInstance() {
    	return this.instance;
    }
}
const obj1 = new Singleton();
const obj2 = new Singleton();
console.log(obj1 === obj2); //true

→ a와 b는 Singleton.instance라는 하나의 인스턴스를 가진다.

 

 

728x90
반응형