반응형

생성패턴 - Singleton

 

해결하려는 문제

  • 클래스의 인스턴스가 단 1개임을 보장해야함
  • 인스턴스 생성을 제어할 수 있어야함
  • 1개뿐인 인스턴스에 쉽게 접근할 수 있어야함 (feat. 글로벌)

 

 

클래스 다이어그램

Singleton

-  singleton : Singleton        

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯

-  Singleton()

+  getlnstance() : Singleton 

 

Thread Safe를 해결하기 위한 volatile 방법

public class Singleton {
    private static volatile Singleton instance;
    
    private Singleton() {
    }
    
    public static Singleton getInstance() {
    	if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
            	    instance = new Singleton();
                }
            }
        }
    	return instance;
    }
}
public class Main {
    public static void main(String[] args) {
    	Singleton singleton = Singleton.getInstance();
    }
}

 

더 좋은 해결 방법 ClassHolder 사용

public class Singleton {
    
    private Singleton() {
    }
    
    private static class SingletonHolder {
        private static final Singleton instance = new Singleton();
    
    public static Singleton getInstance() {
    	return SingletonHolder.instance;
    }
}

 

 


반응형

+ Recent posts