본문 바로가기
Java+Jsp

Singleton pattern (싱글톤 패턴)

by xfree302 2010. 10. 27.
반응형


- 싱글톤 패턴은 객체가 전체 프로그램 내에 단 하나의 인스턴스만 생성되게하는 것이다.
여러개의 객체가 생성되어도 상관없지만 자원낭비를 막기위해 고통으로 사용하는 객체를
싱글톤으로 생성한다.

public class Singleton {
 private static Singleton st = new Singleton();

 private Singleton() {
  System.out.println("인스턴스 생성");
 }

 public static Singleton getInstance() {
  return st;
 }

 public static void main(String[] args) {
  Singleton st1 = Singleton.getInstance();
  Singleton st2 = Singleton.getInstance();

  if(st1 == st2)
   System.out.println("st1 == st2");
  else
   System.out.println("st1 <> st2");

  if(st1.equals(st2))
   System.out.println("st1 equals st2");
  else
   System.out.println("st1 not equals st2");

 }
}

- 문제는 thread에서 싱글톤을 사용할 경우 각 thread가 다른 객체를 사용하게 될 가능성이 있다.

public static synchronized Singleton getInstance() {
  return st;
}

위와 같이 해결할 수 있겠으나 동기화할 경우 프로그램의 성능저하가 있다.

아래와 같이 해결할 수 있다.

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

java 1.4 버전 이하에서는 사용할 수 없다.

반응형