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
복사
•
const foo1 = require('foo');
const foo2 = require('foo');
console.log(foo1 === foo2); // true
TypeScript
복사