반응형

싱글턴 패턴(Singleton pattern) 예제코드


사용하게 된 계기

 작성한 클래스로 객체를 생성해서 사용을 하는데, 굳이 여러개의 객체를 만들 필요가 없지만, 자주 호출되는 경우 사용하는 것이 싱글턴이고, 웹 프로그램에서도 주로 네트워크라던가 감시하는 종류의 역할을 하는 프로그램의 경우에는 여러객체를 생성하게 되면 상당히 낭비를 하게 된다는 것을 알게 된다.

 이러한 코딩 패턴을 싱글턴(필자는 싱글톤이라고 종종 읽기도 한다)이라고 하고 이러한 패턴은 대부분 프로그래밍 언어에서 디자인이 가능하다. 싱글턴의 자세한 패턴은 "디자인 패턴"에 대해서 공부를 하도록 하자. 타입스크립트(TypeScript)는 비교적 C#과 비슷한 문법을 유지하고 있기 때문에 경력자라면 쉽게 구현하여 사용할 수 있다.


싱글턴 조건

1. 객체가 하나만 존재해야 한다. 객체를 추가로 생성해도 객체는 하나가 되어야 한다.

2. 해당 객체의 메서드는 인스턴스를 통해서 사용할 수 있다.


타입스크립트의 싱글턴 예제들

예제1

 가장 기본적인 예제로 클래스가 생성되는 과정에서 인스턴스에 자기자신이 선언이 된다.

class Singleton
{
    private static _instance: Singleton = new Singleton;
    constructor()
    {
        if(Singleton._instance){
            throw new Error("Error: Instantiation failed: Use Singleton.getInstance()");
        }
        Singleton._instance = this;
    }
    public static getInstance(): Singleton
    {
        return Singleton._instance;
    }
    //...
}
// 싱글턴 사용을 위한 인스턴스
var singleton = Singleton.getInstance();

참조: http://www.codebelt.com/typescript/typescript-singleton-pattern/


예제2

 타입스크립트 2.0 이후부터 권장이 되는 방식으로 앞의 예제1의 경우 클래스가 정의 된가 동시에 싱글턴의 객체가 생성이 된다. 하지만, 이 방식의 경우 코드를 보면 알겠지만, 인스턴스를 최초로 받을 때 객체가 생성이 되기 때문에 라이브러리로 만들어서 사용한다면, 불필요한 객체롤 아예 만들지 않을 수 있기 때문에 위의 방식보다 좀 더 나은 방식이다.

class Singleton
{
    private static _instance: Singleton;
    constructor()
    {
        //...
    }
    public static get Instance()
    {
        return this._instance || (this._instance = new this());
    }
    //...
}
// 싱글턴 사용을 위한 인스턴스
var singleton = Singleton.Instance;


참조: https://github.com/Microsoft/TypeScript/issues/2341


그밖의 예제

검색을 좀 해보면 상당히 많은 방식들을 찾을 수 있다. 아래의 스택오버플로워(stackoverflow)의 채택된 답변외에도 다양한 답들이 있는 것을 확인할 수 있다.

스택오버플로워 질문: http://stackoverflow.com/questions/30174078/how-to-define-singleton-in-typescript

반응형

+ Recent posts