Java-Singleton Pattern


  1. 생성자를 private으로 만든다. new를 막기 위함이다.
  2. private static final 변수를 내부에서 초기화
public class Singleton{
	private static final Singleton instance = new Singleton();
	private Singleton(){ }
	public static Singleton getInstance(){ return instance; }
}

Lazy Initialization: 필요할 때 객체를 생성해서 자원 낭비를 막는다.

public class Singleton{
	private static Singleton instance;
	private Singleton{}{ }
	
	public synchronized static Singleton getInstance(){
		if(instance == null){
			instance = new Singleton();
		}
		return instance;
	}
}

이 경우 getInstance 메소드 호출할 때 마다 동기화를 수행하기 때문에 성능 저하가 심하다.

DCL (Double-Checking Locking)방법

  • 인스턴스가 null인지 확인 한 후, null이면 동기화를 얻고 객체를 생성한다. 그리고 그 다음부터는 동기화를 하지 않아도 된다.
public class Singleton{
	private volatitle static Singleton instance;
	
	private Singleton(){}

	public static Singleton getInstance(){
		if(instance == null){
			synchronized(Singleton.class){
				if(instance == null){
					instance = new Singleton();
				}
			}
		}
	}
}

참고자료

http://cleancodes.tistory.com/14


'Computer Science > Design Pattern' 카테고리의 다른 글

Java-Builder Pattern  (0) 2017.08.22
Java-Singleton Pattern  (0) 2017.08.22

+ Recent posts