반응형
싱글톤 패턴 (Singleton Pattern)
싱글톤 패턴은 클래스의 인스턴스가 오직 하나만 생성되도록 보장하고, 그 인스턴스에 전역적으로 접근할 수 있게 하는 생성(Creational) 디자인 패턴입니다.
핵심 개념
| 특징 | 설명 |
|---|---|
| 단일 인스턴스 | 클래스의 인스턴스가 앱 전체에서 딱 하나만 존재 |
| 전역 접근점 | 어디서든 동일한 인스턴스에 접근 가능 |
| 지연 초기화 | 필요한 시점에 인스턴스를 생성 (Lazy Initialization) |
구현 예시
Java
public class Singleton {
// 클래스 로딩 시 JVM이 딱 한 번만 생성
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
언제 사용하나요?
- 설정(Configuration) 관리자 — 앱 전체 설정을 한 곳에서 관리
- 로그(Logger) — 로그 출력 인스턴스를 하나로 유지
- DB 커넥션 풀 — 데이터베이스 연결을 하나로 공유
- 캐시(Cache) 관리 — 전역 캐시 저장소
장점 vs 단점
✅ 장점
- 인스턴스가 하나뿐이므로 메모리 절약
- 전역 상태를 일관성 있게 관리
- 인스턴스 생성 비용이 클 때 성능 이점
❌ 단점
- 전역 상태로 인해 코드 간 결합도 증가
- 단위 테스트(Unit Test)가 어려움 — Mock 처리 복잡
- 멀티스레드 환경에서 동기화 처리 필요
- SOLID 원칙 위반 가능성 (단일 책임 원칙, 개방-폐쇄 원칙)
멀티스레드 주의사항
멀티스레드 환경에서는 두 스레드가 동시에 instance == null을 체크해 인스턴스가 두 개 생성될 수 있습니다. 이를 방지하는 방법:
- Synchronized/Lock 사용
- Double-Checked Locking (위 Java 예시)
- Eager Initialization — 클래스 로딩 시 미리 생성
- Enum 활용 (Java에서 가장 안전한 방법)
반응형
'Design Pattern' 카테고리의 다른 글
| Factory Pattern (0) | 2020.05.06 |
|---|---|
| Chain Of Responsibility (0) | 2020.05.02 |
| Observer Pattern (0) | 2020.05.02 |
| Template Method Pattern (0) | 2020.05.01 |
| Facade Pattern (0) | 2020.04.03 |