Language/Java

[ Singleton pattern ] 싱글톤패턴의 다양한 사용방법

행복전설 2014. 11. 20. 21:20

[ Singleton pattern ] 싱글톤패턴의 다양한 사용방법

brogram.egloos.com/630779

자바 개발을 하면서 제일 많이 쓰는 패턴 중 하나가 싱글톤 패턴이다.
그리고 싱글톤 소스 또한 다양하게 작성한다.

----------------------------------------------------------------------------------
1)
public class Singleton{
 private static final Singleton instance=new Singleton();
 private Singleton(){}
 public static final Singleton getInstance(){
  return instance;
 }
}
----------------------------------------------------------------------------------
아래 2번과 같은 경우는 멀티스레드 시 위험하다.

2)
public class Singleton{
 private static Singleton instance=null;
 private Singleton(){}
 public static final Singleton getInstance(){
  if(instance==null)
   instance=new Singleton();
  return instance;
 }
}
----------------------------------------------------------------------------------
아래 3번과 같은 경우는 안전하지만 성능상 1번이 제일 좋다.

3)
public class Singleton{
 private static Singleton instance=null;
 private Singleton(){}
 public static final Singleton getInstance(){
  if(instance==null)
   synchronized(Singleton.class){
    instance=new Singleton();
   }
  return instance;
 }
}
----------------------------------------------------------------------------------
아래 4번과 같은 경우는 싱글톤에서 직렬화를 처리하기 위한 방법이다. Serializable 을 구현하고 readResolve 메서드를 구현하고, 모든 인스턴스 필드를 transient 로 선언한다.

4)
public class Singleton implements Serializable{
 private static final long serialVersionUID=6209266452691660409L;
 private static final transient Singleton instance=new Singleton();
 private Singleton(){}
 public static final Singleton getInstance(){
  return instance;
 }
 private Object readResolve(){
  return instance;
 }
}
----------------------------------------------------------------------------------
아래 5번과 같은 경우는 enum 을 사용한 구현방법이다. 직렬화가 자동으로 지원되며 인스턴스가 여러 개 생기지 않도록 지원한다.

5)
enum Singleton{
 instance;
 public void method(){}
}

 

[출처] brogram.egloos.com/630779