
JVM내에서 인스턴스가 오직 1개만 생성되어야 하는 디자인 패턴.
pulbic class Singleton {
// 객체를 static 변수로 설정하여 인스턴스화 X, private으로 직접 접근 제한
private static Singleton instance = new Singleton();
// 기본 생성자를 private으로 설정하여 직접 접근 제한
private Singleton() {}
// getInstance() 함수를 통해서만 인스턴스를 얻을 수 있음
public static Singleton getInstance() {
return instance
}
}
멀티스레드 환경에서 객체 중복 생성 및 동기화 문제가 발생하므로 주의하여 구현해야한다.
이를 해결하는 방법으로 Synchronized 키워드, DCL(Double Checked Locking) Singleton Pattern, ENUM 등 다양하게 존재하지만, 이 중에서 가장 많이 쓰이는 방법 하나를 소개한다.
LazyHolder Singleton 패턴 : 내부 클래스를 만들어 Singleton 클래스가 최초 로딩될 때가 아닌, getInstance 메서드가 호출될 때 로딩되어 인스턴스를 생성한다.
public class Singleton {
private Singleton(){}
public static Singleton getInstance() {
return LazyHolder.INSTANCE;
}
private static class LazyHolder {
private static final Singleton INSTANCE = new Singleton();
}
}