Java-Singleton Pattern
- 생성자를 private으로 만든다.
new
를 막기 위함이다. - 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();
}
}
}
}
}
참고자료
'Computer Science > Design Pattern' 카테고리의 다른 글
Java-Builder Pattern (0) | 2017.08.22 |
---|