생성 디자인 패턴 - 싱글턴 본문
반응형
싱글턴 패턴 (Singleton)
- 싱글턴은 클래스에 인스턴스가 하나만 있도록 하면서 이 인스턴스에 대한 전역 접근(액세스) 지점을 제공하는 생성 디자인 패턴입니다.
- 싱글턴 패턴은 다음의 두가지 상황을 구현합니다.
- 클래스의 인스턴스가 하나만 있게 합니다 ⇒ 객체는 최초 1회 생성되고, 다른 객체의 생성을 시도했을 때 똑같은 객체를 돌려받게 됩니다. 물론 new 키워드를 이용하여 객체를 생성하면 무조건 새 객체를 돌려받게 되므로 일반적인 생성방법으로는 구현할 수 없습니다.
- 해당 인스턴스에 대한 전역접근 지점 제공 ⇒ 이는 마치 전역변수와 같은 기능을 하는데, 덮어씌워질 위험이 있는 전역변수와 다르게 이러한 상황에 대한 보호를 제공합니다.
- 위의 상황중 한가지만 해결해도 싱글턴 패턴이라 부를 수 있습니다.
- 대표적인 상황으로 DB연결을 하나의 객체만을 사용해서 연결하고 싶을 때 사용합니다.
싱글턴 구성요소
- Singleton 클래스 : 생성자를 private로 막고 getInstance() 메서드로 선언하여서 객체를 관리합니다.
- getInstance() : 싱글턴 객체가 존재하면 존재하는 걸 반환하고 없으면 최초로 1회생성
- doSomething() : 싱글턴 객체에서의 비즈니스 로직
요약
- 싱글턴을 만드는 과정은
- 다른 코드에서 new 생성자로 객체를 생성하지 못하도록 생성자를 비공개로 막아둡니다.
- 생성자 역할을 하는 정적 생성 메서드를 만듭니다. 내부적으로 이 메서드는 객체를 만들기 위하여 비공개 생성자를 호출한 후 객체를 정적 필드에 저장합니다. 이 메서드에 대한 그다음 호출들은 모두 캐시된 객체를 반환합니다. (getInstance())
- 이로써 객체를 생성하면 모두 같은 객체를 돌려받게 됩니다.
코드
class Singleton {
// 실제로 싱글턴에 접근하는 객체들이 이용할 멤버변수, 이걸로 비즈니스 로직 실행
private static instance: Singleton;
// 외부에서 인스턴스 생성 금지(private)
private constructor() {}
// 싱글턴 인스턴스에 접근을 제어하는 정적 메서드. 클라이언트는 정적 메서드로 유일한 싱글턴 인스턴스를 접근할 수 있다.
public static getInstance(): Singleton {
// 없으면 싱글턴 클래스의 유일한 인스턴스를 생성한다.
if (!Singleton.instance) {
Singleton.instance = new Singleton();
}
return Singleton.instance; // 있으면 있는거 return
}
// 인스턴스에서 실제 수행할 비즈니스 로직
public doSomething(): void {
console.log("Singleton instance is doing something.");
}
}
// 2개를 생성하던 100개를 생성하던 싱글턴으로 만들어진 인스턴스는 모두 동일한 인스턴스이다.
const instance1 = Singleton.getInstance();
const instance2 = Singleton.getInstance();
console.log(instance1 === instance2); // true
instance1.doSomething(); // "Singleton instance is doing something."
instance2.doSomething(); // "Singleton instance is doing something."
결과
출처
반응형
'OOP 디자인 패턴 > 생성패턴' 카테고리의 다른 글
생성 디자인 패턴 - 프로토타입 (0) | 2023.05.19 |
---|---|
생성 디자인 패턴 - 빌더 (0) | 2023.05.18 |
생성 디자인 패턴 - 추상 팩토리 (0) | 2023.04.30 |
생성 디자인 패턴 - 팩토리 메서드 (0) | 2023.04.22 |
Comments