싱글톤 패턴(singleton pattern)
어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 객체를 만들어 사용하는 디자인 패턴이다 -> 생성자의 호출이 반복적으로 이뤄져도 실제로 생성되는 객체는 최초 생성된 객체를 반환해줌!!
인스턴스가 오직 1개만 생성되는 특징을 가진 싱글턴 패턴을 이용하여 여러 thread가 동시에 해당 인스턴스를 공유하여 사용할 수 있게끔 할 수 있기 때문에 요청이 많은 곳에서 사용하면 효율을 높일 수 있으나 동시성(Concurrency)문제를 고려해서 설계해야함!
public class SingletonClass {
private static SingletonClass instance = new SingletonClass();
private SingletonClass(){}
public static SingletonClass getInstance(){
if(instance == null){
instance = new SingletonClass();
}
return instance;
}
}
동기화 문제를 해결하는 가장 일반적인 방법
public class SingletonClass { private SingletonClass(){} private static class LazyHolder{ public static final SingletonClass instance = new SingletonClass(); } public static SingletonClass getInstance(){ return LazyHolder.instance; } }
이 방법은 JVM의 클래스 초기화 과정에서 보장되는 원자적 특성을 이용하여 초기화 문제에 대한 책임을 JVM에 떠 넘긴 방식(holder안에 선언된 instance가 static이기 때문에 클래스 로딩시점에 한번만 호출되고 final이므로 다시 값이 할당되지 않게 함)