C#

C# | 디자인패턴 싱글톤

채린.__. 2025. 6. 5. 09:55

 "싱글톤(Singleton) 타입"은 소프트웨어 디자인 패턴 중 하나로, 클래스의 인스턴스를 오직 하나만 생성하도록 제한하는 패턴이다. 주로 전역적으로 하나만 존재해야 하는 객체에 사용된다.


🧩 싱글톤 패턴(Singleton Pattern)이란?

“특정 클래스의 인스턴스가 애플리케이션 전체에서 단 하나만 존재하도록 보장하는 패턴”


🎯 왜 사용할까? (사용 목적)

목적 설명

전역 접근 프로그램 어디서든 동일한 객체에 접근할 수 있음
공유 자원 관리 DB 연결, 설정 파일, 로그 관리처럼 공유되어야 하는 자원을 일관성 있게 관리
성능 향상 자주 생성될 필요가 없는 무거운 객체를 한 번만 생성
상태 유지 객체 상태를 한 곳에서 유지하고 관리하고자 할 때

✅ 싱글톤 클래스의 특징

요소 설명

private 생성자 외부에서 new로 생성하지 못하게 막음
static 인스턴스 필드 인스턴스를 담아두는 정적 변수
static 메서드 (getInstance()) 인스턴스를 리턴하며, 필요시 직접 생성

🧱 구조 예시 (C#)

public class Singleton
{
    private static Singleton instance = null;
    private static readonly object syncRoot = new object();

    private Singleton() { }

    public static Singleton getInstance()
    {
        lock (syncRoot)
        {
            if (instance == null)
            {
                instance = new Singleton();
            }
            return instance;
        }
    }

    public void DoSomething()
    {
        Console.WriteLine("싱글톤 메서드 실행!");
    }
}

🖥️ 사용 예시

Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();

Console.WriteLine(object.ReferenceEquals(s1, s2)); // true
  • s1과 s2는 같은 인스턴스를 가리킨다.

🔐 싱글톤이 유용한 사례

사용 예 설명

로그 기록기 (Logger) 애플리케이션 전체에서 공통된 로그 객체 사용
설정 객체 (ConfigManager) 환경설정 파일을 불필요하게 여러 번 읽지 않게
데이터베이스 연결 풀 (DBConnectionPool) 연결을 재사용하여 성능 최적화
UI의 메인 윈도우 프로그램에 하나만 존재해야 하는 화면

⚠️ 주의사항

  • 테스트 어려움: 전역 상태를 가지므로 유닛 테스트가 어려워질 수 있음
  • 의존성 주입(DI)과 충돌: DI 컨테이너 기반 설계에서는 싱글톤 직접 구현이 안 맞을 수도 있음
  • 남용 위험: 아무 객체에나 싱글톤 적용하면 코드가 꼬일 수 있음