Singleton
📌 Singleton 패턴이란?
info
Singleton 패턴은 프로그램 내에서 하나의 인스턴스만 존재하도록 보장하는 디자인 패턴이다.
주로 설정 객체나 공통 유틸리티 등에 사용되며, 전역 접근 지점(Global Access Point)을 제공한다.
✅ Singleton의 장점
- 메모리 낭비 방지 (하나의 객체만 생성)
- 전역 상태 공유 (모든 호출 지점에서 동일 객체 사용)
- 객체 생성 비용이 큰 경우 재사용 가능
✅ Singleton의 단점
- 멀티스레드 환경에서 동기화 필요
- 단위 테스트 어려움 (상태가 공유되기 때문)
- 클래스 간 결합도 증가 가능성
✅ Singleton 구현 예시 (Java - Double Checked Locking 방식)
public class DoubleCheckedLockingSingleton {
private static volatile DoubleCheckedLockingSingleton instance;
private DoubleCheckedLockingSingleton() {
// private constructor to prevent instantiation
}
public static DoubleCheckedLockingSingleton getInstance() {
if (instance ** null) {
synchronized (DoubleCheckedLockingSingleton.class) {
if (instance ** null) {
instance = new DoubleCheckedLockingSingleton();
}
}
}
return instance;
}
}
tip
volatile
키워드와synchronized
블록을 통해 동시성 문제를 해결하고 지연 초기화(lazy initialization)를 구현함.
✅ Singleton 패턴 사용 사례
- 설정 파일 관리 객체
- 로그 관리자 (Logger)
- DB 연결 풀 (Connection Pool)
- 공통 연산 유틸 클래스
✅ 기타 Singleton 구현 방법
🔹 정적 초기화 방식
public class StaticSingleton {
private static final StaticSingleton instance = new StaticSingleton();
private StaticSingleton() {}
public static StaticSingleton getInstance() {
return instance;
}
}
- 초기화가 빠르고 간단하지만 lazy loading 불가능
🔹 Enum 방식 (가장 권장됨 - Effective Java)
public enum EnumSingleton {
INSTANCE;
}
- 직렬화/역직렬화에도 안전
- Java에서 가장 간단하고 안전한 Singleton 구현
댓글남기기