Search
♻️

[디자인 패턴 - 생성 패턴] 싱글턴 패턴 (Singleton)

1. 의도

GoF
오직 한개의 클래스 인스턴스만을 갖도록 보장하고, 이에 대한 전역적인 접근점을 제공

2. 활용성

GoF
클래스의 인스턴스가 오직 하나여야 함을 보장하고, 잘 정의된 접근법(access point)으로 모든 사용자가 접근할 수 있도록 해야 할 때
유일한 인스턴스가 서브 클래싱으로 확장되어야 하며, 사용자는 코드의 수정없이 확장된 서브 클래스의 인스턴스를 사용 할 수 있어야 할 때

3. 구조

UML Class Diagram

4. 참여자

참여자
역할
예시
Singleton
Instance() 연산을 정의하여 유일한 인스턴스로 접근할 수 있도록 함 - Instance() 연산은 클래스 연산

5. 협력 방법

사용자는 Sington 인스턴스에 정의된 Instance() 연산을 통해 유일하게 생성되는 단일체 인스턴스에 접근 가능

6. 결과

유일하게 존재하는 인스턴스로의 접근 통제 가능
네임 스페이스를 좁힐 수 있음
연산 및 표현 정제 허용
인스턴스의 개수를 변경하기 자유로움
클래스 연산을 사용하는 것보다 훨씬 유연한 방법

7. 예시 코드

class Singleton { constructor() { this.message = 'I am an instance'; } } module.exports = new Singleton();
TypeScript
복사
Node에서는 require / import 시, 자동으로 캐싱됨
동일한 객체가 반환됨
const foo1 = require('foo'); const foo2 = require('foo'); console.log(foo1 === foo2); // true
TypeScript
복사