디자인 패턴

[C#]싱글톤 디자인 패턴(Singleton Design Pattern)

기리도 2022. 6. 15. 14:03
728x90

📕싱글톤 디자인 패턴(Singleton Design Pattern)

싱글톤 패턴이란 클래스의 인스턴스를 하나만 생성해서 전역적으로 사용하게 하는 디자인 패턴이다. 싱글톤을 사용하면 해당 클래스의 인스턴스를 생성하지 않고도 외부에서 참조할 수 있기 때문에 특정 자원을 여러 클래스와 공유할 때 효과적이다.

다음은 싱글톤을 구현할 때 고려해야 할 몇 가지 사항이다.

  1. 생성자의 접근제한자는 private이어야 하며 매개 변수는 없어야 한다. 이는 외부에서 생성되는 것을 막기 위해서이다.
  2. 클래스는 상속될 수 없도록 sealed 한정자를 사용해 선언해야 한다.
  3. 싱글톤 클래스의 인스턴스를 참조하고 싶을 땐 private으로 선언한 정적 변수를 통해 참조해야 한다.
  4. 싱글톤 인스턴스를 반환할 정적 프로퍼티(혹은 메서드)를 public으로 생성한다. 생성한 프로퍼티는 싱글톤 클래스의 인스턴스가 존재하는지 확인하고, 존재한다면 싱글톤 클래스의 인스턴스를 반환한다. 만약 존재하지 않는다면 직접 인스턴스를 생성한 뒤 반환한다.

 

📖싱글톤 구현하기

namespace SingletonDemo
{
    public sealed class Singleton
    {
        private static int counter = 0;
        private static Singleton instance = null;
        public static Singleton GetInstance
        {
            get
            {
                if (instance == null)
                    instance = new Singleton();
                return instance;
            }
        }
        
        private Singleton()
        {
            counter++;
            Console.WriteLine("Counter Value " + counter.ToString());
        }
        public void PrintDetails(string message)
        {
            Console.WriteLine(message);
        }
    }
}

Singleton 클래스를 sealed로 선언한 뒤 private을 사용해 생성자를 만들었다. 외부에서 Singleton 클래스에 접근할 땐  GetInstance 프로퍼티를 호출하면 된다.

namespace SingletonDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Singleton fromTeachaer = Singleton.GetInstance;
            fromTeachaer.PrintDetails("From Teacher");
            Singleton fromStudent = Singleton.GetInstance;
            fromStudent.PrintDetails("From Student");
            Console.ReadLine();
        }
    }
}

실행 결과는 다음과 같다.

Counter Value 1
From Teacher
From Student

GetInstance를 두 번 호출했는데도 싱글톤 인스턴스는 하나만 생성된 것을 볼 수 있다.


🔖인용한 사이트

https://dotnettutorials.net/lesson/singleton-design-pattern/

 

Singleton Design Pattern in C#

In this article, I am going to discuss Singleton Design Pattern in C# with Example. Singleton Design Pattern ensures that only one instance

dotnettutorials.net

 

728x90