Singleton
🧩 Singleton 패턴이란?
정의
Singleton 패턴은 프로그램 내에서 하나의 인스턴스만 존재하도록 보장하는 디자인 패턴이다.
주로 설정 객체, 공통 유틸리티, 전역 접근이 필요한 객체에 사용한다.
✅ Singleton의 특징
- 메모리 절약: 인스턴스를 여러 개 만들지 않는다.
- 전역 상태 공유: 모든 곳에서 같은 객체를 사용한다.
- 객체 생성 비용 절감: 반복 생성 비용을 줄일 수 있다.
⚠️ Singleton의 단점
- 멀티스레드 환경에서 동기화가 필요하다.
- 단위 테스트가 어려워질 수 있다.
- 의존성 관리가 복잡해질 수 있다.
🛠️ Singleton 구현 예시 (Java - Double Checked Locking)
public class DoubleCheckedLockingSingleton {
private static volatile DoubleCheckedLockingSingleton instance;
private DoubleCheckedLockingSingleton() {
// 인스턴스 생성을 막기 위한 private 생성자
}
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 연결 풀 관리 객체
- 공통 계산 유틸리티 클래스
🧪 다른 구현 방식
1. 정적 초기화 방식
public class StaticSingleton {
private static final StaticSingleton instance = new StaticSingleton();
private StaticSingleton() {}
public static StaticSingleton getInstance() {
return instance;
}
}
- 초기화가 빠르고 단순하다.
- lazy loading은 불가능하다.
2. Enum 방식
public enum EnumSingleton {
INSTANCE;
}
- 직렬화 문제에 안전하다.
- Java에서 가장 간단하고 안전한 Singleton 구현 방식 중 하나다.
댓글남기기