Java
Java - 싱글턴(Singleton) 패턴
codeManager
2022. 5. 30. 20:26
반응형
싱글턴 패턴이란?
- 애플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(static) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴
- 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나고 최초 생성 이후에 호출된 생성자는 최초에 생성한 객체를 반환
- 다른 클래스 인스턴스들과 데이터 공유가 쉬움
- Database Connection Pool처럼 공통된 객체를 여러개 생성해서 사용해야하는 상황에서 많이 사용(쓰레드풀, 캐시, 로그 기록 객체등)
- anti-pattern이므로 가급적 사용하지 않는 것이 좋음
싱글턴 패턴의 문제점
- 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우 다른 클래스 인스턴스들 간의 결합도가 높아져 "개방-폐쇄 원칙"을 위배하게 된다.
-
수정, 테스트가 어려움
싱글턴(Singleton) 생성 예제
1. Double Checked Locking
public class Singleton {
private volatile static Singleton instance;
private Singeton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized(Singleton.class) {
if (instance == null) {
instance == new Singleton();
}
}
}
return instance;
}
}
2. Lazy Holder
public class Singleton {
private Singleton() {}
public static Singleton getInstance() {
return LazyHolder.INSTANCE;
}
private static class LazyHolder {
private static final Singleton INSTANCE = new Singleton();
}
}
반응형