TypeScript의 싱글톤
싱글톤이 정확히 무엇인가요?
싱글톤은 클래스의 인스턴스를 하나만 생성할 수 있는 디자인 패턴입니다.
어떻게 싱글톤을 구현할 수 있습니까?
개념을 이해하는 가장 좋은 방법은 예제를 사용하는 것입니다.
따라서 하나의 인스턴스만 가질 수 있는 클래스를 만들고 이 클래스에 두 개의 변수(id 및 name)와 이러한 변수를 기록하는 하나의 메서드가 있기를 원한다고 가정해 보겠습니다.
먼저
MyInfo
라는 클래스를 만들고 자체 클래스 유형을 갖는 instance
라는 개인 변수를 추가합니다.이름 자체가 정당하므로 이 변수
instance
를 사용하여 클래스의 인스턴스를 저장합니다.class MyInfo {
private static instance: MyInfo;
}
그런 다음 개인 생성자 메서드를 만듭니다. 생성자를 비공개로 만드는 이유는
new
를 사용하여 클래스 외부에서 클래스의 새 인스턴스를 만드는 것을 방지하기 위함입니다.class MyInfo {
private static instance: MyInfo;
private constructor(public id: number, public name: string) {}
}
생성자를 비공개로 만들었으므로 클래스의 인스턴스를 만드는 방법이 필요합니다.
클래스에 이미 인스턴스가 있는지 확인하는 정적 메서드를 만들어 이를 수행합니다. 클래스에 이미 인스턴스가 있는 경우 동일한 인스턴스를 반환하고 그렇지 않은 경우 새 인스턴스를 만들고 해당 인스턴스를
instance
변수에 저장한 다음 나중에 동일한 인스턴스를 반환합니다.다음과 같이 할 수 있습니다.
class MyInfo {
private static instance: MyInfo;
private constructor(public id: number, public name: string) {}
static getInstance() {
if (this.instance) {
return this.instance;
} else {
this.instance = new MyInfo(1, "Musaib");
return this.instance;
}
}
}
이제
getDetails
및 name
를 기록하는 id
메서드를 구현할 수 있습니다.class MyInfo {
private static instance: MyInfo;
private constructor(public id: number, public name: string) {}
static getInstance() {
if (this.instance) {
return this.instance;
} else {
this.instance = new MyInfo(1, "Musaib");
return this.instance;
}
}
getDetails() {
console.log(`Hi i'm ${this.name} and my id is ${this.id}`);
}
}
이제 인스턴스를 만들고 세부 정보를 얻을 수 있는지 확인하겠습니다.
const obj = MyInfo.getInstance();
console.log(obj);
obj.getDetails();
코드에 대한 출력은 다음과 같습니다 👇
동일한 getInstance 메서드를 사용하여 다른 인스턴스를 만들려고 하면 어떻게 됩니까?
사실 당신은 완전히 그렇게 할 수 있습니다!
하지만 생성한 새 인스턴스는 OLD 인스턴스와 동일한 메모리 위치를 가리킵니다😁.
클래스 외부에서 여전히 new를 사용하면 어떻게 됩니까?
new
를 사용하여 클래스 외부에서 클래스의 새 인스턴스를 만들려고 하면 Constructor of class 'MyInfo' is private and only accessible within the class declaration.ts(2673)
라는 오류가 발생하므로 새 인스턴스를 만들 수 없습니다.
Reference
이 문제에 관하여(TypeScript의 싱글톤), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mdmusaibali/singletons-in-typescript-ci4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)