디자인패턴

싱글턴 패턴(Singleton Pattern)

ppp5500 2022. 4. 1. 00:23

싱글턴 패턴은 객체가 오직 하나만 생성되는 것을 보장하고 어디에서든 이 객체에 접근할 수 있도록 하는 디자인 패턴이다.

 

Singleton
-instance
-Singleton()
+getInstance()

다이어그램으로 표현하면 이렇다.

 

객체가 하나만 생성되고 어디에서든 호출 가능하므로 여러곳에서 호출한 횟수가 누적되어야 하는 경우 등에서 유용하다.

 

using System.Threading;

int user_num = 5;
Thread[] users = new Thread[user_num];
for(int i = 0; i < users.Length; i++)
{
    users[i] = new Thread(run);
    users[i].Start();
}

void run()
{
    Printer printer = Printer.getPrinter();
    printer.print("Thread number: "+Thread.CurrentThread.ManagedThreadId);
}

public class Printer
{
    private static Printer printer = new Printer();
    private int Counter = 0;
    private Printer() { }

    public static Printer getPrinter()
    {
        if(printer == null)
        {
            try
            {
                Thread.Sleep(1000);
            }
            catch (TimeoutException) { }
            printer = new Printer();
        }
        return printer;
    }

    public void print(String str)
    {
        Counter++;
        Console.WriteLine(Counter+" - "+str);
    }
}

실행결과

객체가 하나만 생성되고 유지되어 각각 다른 쓰레드에서 호출하였어도 카운터가 유지된다.