1. 개요

Singleton은 객체의 인스턴스를 하나만 생성하여 전역적으로 접근할 수 있도록 보장하는 디자인 패턴입니다. 애플리케이션에서 설정 관리, 로깅, 데이터베이스 연결과 같은 전역적으로 공유해야 하는 리소스에 적합합니다.


2. 개념

Singleton 패턴의 핵심은 다음과 같습니다:

  • 클래스의 인스턴스가 단 하나만 생성되도록 제한.
  • 해당 인스턴스에 글로벌 접근점을 제공.

이 패턴은 정적 변수를 통해 인스턴스를 관리하며, 외부에서 생성자를 직접 호출하지 못하도록 private으로 제한합니다.


3. 예제

다음은 C#으로 작성된 Singleton 패턴의 간단한 구현 예제입니다:

public class Singleton
{
    private static Singleton _instance;
    private static readonly object _lock = new object();

    // Private constructor to prevent instantiation from outside
    private Singleton() { }

    public static Singleton Instance
    {
        get
        {
            lock (_lock)
            {
                if (_instance == null)
                {
                    _instance = new Singleton();
                }
            }
            return _instance;
        }
    }

    public void LogMessage(string message)
    {
        Console.WriteLine($"[Singleton Log]: {message}");
    }
}

// Usage
class Program
{
    static void Main()
    {
        Singleton.Instance.LogMessage("Hello, Singleton!");
    }
}

설명:

  1. _instance: Singleton 객체를 담는 정적 변수.
  2. _lock: 멀티스레드 환경에서 동시 접근 문제를 방지.
  3. Private 생성자: 외부에서 객체 생성을 제한.
  4. Instance 프로퍼티: Singleton 객체를 반환하며, 필요 시 초기화.

4. 주의점

  • 결합도 증가: Singleton은 전역적으로 접근 가능하기 때문에 코드 흐름이 복잡해지고, 의존성을 파악하기 힘듭니다. 유지보수가 어려워질 수 있습니다.
  • SRP(Single Responsibility Principle) 위반 가능성: Singleton 클래스가 너무 많은 역할을 맡는 슈퍼클래스가 되기 쉬워, 단일 책임 원칙이 깨질 위험이 있습니다.

5. 결론

Singleton 패턴은 자원을 효율적으로 관리하고 일관된 접근 방식을 제공합니다. 하지만, 남용하면 결합도를 높이고 테스트를 어렵게 만들 수 있으니 신중히 사용해야 합니다.


6. 관련 링크


다이어그램

반응형

+ Recent posts