- 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴.
- 만들어진 인스턴스로 로직을 만들고 데이터베이스 연결 모듈에 많이 사용됨.
- 하나의 인스턴스를 만들어 놓고 다른 모듈들이 공유하며 사용하기 때문에 인스턴스를 생성할 때 사용하는 비용이 거의 없음.
- 하지만 의존성이 높아짐.
💡
let instance = null;
class Singleton {
constructor() {
if (!instance) {
instance = this;
}
return instance;
}
sayHello() {
console.log("Hello, World!");
}
}
module.exports = Singleton;
서버가 실행될 때 인스턴스를 실행해두고 그 인스턴스를 지속적으로 사용한다 라고 이해하면 되겠지?
- 네, 맞습니다. 싱글톤 패턴은 어떤 클래스의 인스턴스가 한 번만 생성되도록 보장하고, 이후에는 그 인스턴스를 지속적으로 사용하도록 합니다. 이를 통해, 여러 개의 객체를 생성하고 관리하는 대신 하나의 인스턴스만을 생성하여 사용함으로써 메모리 사용량을 줄이고 성능을 향상시킬 수 있습니다.
- Node.js에서도 이러한 싱글톤 패턴을 구현할 수 있으며, 서버가 실행될 때 인스턴스를 미리 생성해두고, 이후 요청이 들어올 때마다 해당 인스턴스를 사용하는 방식으로 동작합니다. 이를 통해, 서버의 성능을 향상시키고 메모리 사용량을 최적화할 수 있습니다.
단점
- TDD를 할 때 걸림돌이 됨. TDD는 단위 테스트를 주로 하는데 단위 테스트는 테스트가 서로 독립적이어야 하며 테스트를 어떤 순서로든 실행할 수 있어야함.
- 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴이므로 각 테스트마다 독립적인 인스턴스를 만들기가 어려움.
- 의존성 주입
- 모듈간의 결합을 강하게 만든다는 단점.
- 결합도
💡
[노션](https://olive-barber-595.notion.site/aba9f4d8676a4e9da7959d1185254b90)