💡Aha!

싱글톤 패턴 (Singleton pattern)

요약

인스턴스를 사용할 때, 똑같은 인스턴스를 다시 생성하지 않고 재활용하기 위한 패턴

쓰는 이유는?

  • 메모리 낭비 방지: 인스턴스(객체)를 새로 선언할 때 마다 메모리를 새로 할당 받게 되는데, 동일한 객체인 경우 새로 할당 받지 않고 재사용하므로써 메모리 낭비를 하지 않게 됨.
  • 데이터 공유: 싱글톤 패턴을 사용하게 되면 전역(혹은 최상단)에 인스턴스가 생성된다. 따라서 다른 인스턴스와 데이터를 공유하기 용이해진다.

예제

TypeScript

출처: https://refactoring.guru/design-patterns/singleton/typescript/example

class Singleton {
private static instance: Singleton;
/**
* 싱글톤의 생성자는 `new` 연산자를 사용한 직접 생성을 방지해야 하기 위해
* 항상 private이여야 합니다.
*/
private constructor() { }
/**
* 싱글톤 인스턴스에 대한 엑세스를 제어하는 정적 메소드
*
* 이 구현을 사용하면 각 하위 클래스의 인스턴스를 하나만 유지하며
* Singleton 클래스를 하위 클래스로 만들 수 있습니다.
*/
public static getInstance(): Singleton {
if (!Singleton.instance) {
Singleton.instance = new Singleton();
}
return Singleton.instance;
}
/**
* 마지막으로, 모든 싱글톤은 인스턴스에서 실행할 수 있는
* 비즈니스 로직을 정의해야 합니다.
*/
public someBusinessLogic() {
// ...
}
}
/**
* 클라이언트 코드.
*/
function clientCode() {
const s1 = Singleton.getInstance();
const s2 = Singleton.getInstance();
if (s1 === s2) {
console.log('Singleton works, both variables contain the same instance.');
} else {
console.log('Singleton failed, variables contain different instances.');
}
}
clientCode();

예제가 하필 TypeScript인 이유는, 내가 TypeScript 사용자이기 때문이다. ㅋㅋ

2024 Dohyun Jung.
Made with ☕️.