반응형
자바 개발을 하면서 제일 많이 쓰는 패턴 중 하나가 싱글톤 패턴이다.
그리고 싱글톤 소스 또한 다양하게 작성한다.
Source2와 같은 경우는 다중 쓰레드 상에서 위험하다. Source3과 같은 경우는 안전하긴 하지만 성능상 Source1이 제일 좋다.
Source4와 같은 경우는 싱글톤에서 직렬화 처리를 해주기 위한 방법이다. Serializable 을 구현해주고 readResolve메소드를 구현하고 모든 인스턴스 필드를 transient 로 선언해준다.
Source5와 같은 경우는 enum을 통한 구현 방법이다. 직렬화가 자동으로 지원되고 인스턴스가 여러개 생기지 않도록 지원해준다.
public class Singleton {
그리고 싱글톤 소스 또한 다양하게 작성한다.
Source2와 같은 경우는 다중 쓰레드 상에서 위험하다. Source3과 같은 경우는 안전하긴 하지만 성능상 Source1이 제일 좋다.
Source4와 같은 경우는 싱글톤에서 직렬화 처리를 해주기 위한 방법이다. Serializable 을 구현해주고 readResolve메소드를 구현하고 모든 인스턴스 필드를 transient 로 선언해준다.
Source5와 같은 경우는 enum을 통한 구현 방법이다. 직렬화가 자동으로 지원되고 인스턴스가 여러개 생기지 않도록 지원해준다.
private static final Singleton instance = new Singleton();
private Singleton(){}
public static final Singleton getInstance(){
return instance;
}
}
[Source. 1]
class Singleton2 {
private static Singleton2 instance = null;
private Singleton2(){}
public static final Singleton2 getInstance(){
if(instance == null) instance = new Singleton2();
return instance;
}
}
private static Singleton3 instance = null;
private Singleton3(){}
public static final Singleton3 getInstance(){
if(instance == null) {
synchronized(Singleton3.class){
instance = new Singleton3();
}
}
return instance;
}
}
[Source. 3]
/**
*
*/
private static final long serialVersionUID = 6209266452691660409L;
private static final transient Singleton4 instance = new Singleton4();
private Singleton4(){}
public static final Singleton4 getInstance(){
return instance;
}
private Object readResolve(){
return instance;
}
}
[Source. 4]
instance;
public void method(){}
}
[Source. 5]
반응형
'Devlopment > Java' 카테고리의 다른 글
Java와 C#(또는 C, C++) 통신에서 엔디안과 인코딩 처리 (0) | 2012.02.09 |
---|---|
JSON 에러 - Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException (0) | 2012.02.06 |
Java 로그 기록 라이브러리 - Log4j (0) | 2011.12.06 |
String vs StringBuffer (0) | 2011.07.01 |
Aptana 플러그인 (0) | 2011.06.13 |
JavaHL (JNI) Not Available (0) | 2011.06.10 |
Builder Pattern (0) | 2011.06.09 |
달팽이 & 피보나치 수열 구현 (0) | 2011.06.01 |
JNI(Java Native Interface) - 객체 (0) | 2011.06.01 |
두 개의 스택을 이용한 큐 구현 (0) | 2011.05.31 |