싱글턴 패턴은 인스턴스가 하나 뿐인 특별한 객체를 만들고, 어디서든 접근할 수 있게 하기 위한 패턴입니다.
유일무이한 객체
객체중에는 하나만 있으면 되는 것이 있습니다. 예를 들면
- 쓰레드 풀, 캐시, 디바이스 드라이버
- 대화 상자, 로그 기록용 객체
- 사용자 설정, 레지스트리 설정 등..
2개 이상인 경우 올바르게 동작하지 않거나 자원을 불필요하게 잡아먹게 되는 경우
객체를 2개 이상을 만들 수 없게끔 설정해주는 패턴이 필요합니다.
싱글턴 패턴은 전역 변수처럼 어디서든 액세스 할 수 있으면서도
필요할 때만 객체를 생성하므로, 항상 상주하는 전역변수보다 더욱 좋은 패턴입니다.
어떻게 만드나요?
아주 간단한 싱글턴을 만들어봅시다.
export default class Singleton {
private static singleton: Singleton;
private constructor() {}
public static getInstance() {
if (!this.singleton) {
this.singleton = new Singleton();
}
return this.singleton;
}
}
Constructor를 Private으로 두어 외부에서 직접 생성자를 호출할 수 없게 하고
내부적으로 정의된 singleton을 리턴하게끔 합니다.
만약 생성한 싱글톤이 있는 경우 새로 만든 후 리턴해주고, 그렇지 않은 경우엔 그냥 리턴해줍니다.
자바와 같은 멀티쓰레딩이 가능한 경우
초기 싱글턴을 생성할 때 getInstance가 동시에 호출되면 싱글턴이 2번 정의될 수 있습니다.
그래서 이를 방지하기 위해 Synchronized 와 같은 키워드를 사용하는데요
꼭 그렇지 않아도 처음부터 선언할 때 생성자를 이용해서 도입해주면 됩니다.
'소프트웨어 > 디자인 패턴' 카테고리의 다른 글
[5] 팩토리 메소드 패턴 (0) | 2020.10.29 |
---|---|
[4] Decorator Pattern (0) | 2020.10.28 |
[3] Strategy Pattern (2) | 2020.10.25 |
[2] Observer Pattern (0) | 2020.10.22 |
[1] Reactor Pattern (4) | 2020.10.19 |
댓글