"싱글톤(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 컨테이너 기반 설계에서는 싱글톤 직접 구현이 안 맞을 수도 있음
- 남용 위험: 아무 객체에나 싱글톤 적용하면 코드가 꼬일 수 있음
'C#' 카테고리의 다른 글
| [ C# ] WinForms Tag 속성 (0) | 2025.06.17 |
|---|---|
| [C#] 비모달- Show() 과 모달-ShowDialog() 의 차이 (0) | 2025.05.22 |
| [ C# ] ToolStripContainer 컨트롤 - 윈폼 레이아웃 컨테이너 컨트롤 (0) | 2025.05.22 |
| [ C# ] SuspendLayout, ResumeLayout - 폼/컨트롤의 레이아웃 계산을 일시 중단하기 (0) | 2025.05.21 |
| C# 인터넷 또는 제한 영역에 있거나 파일에 웹 표시가 있으므로 처리할 수 없습니다. (0) | 2025.05.15 |