본문 바로가기
카테고리 없음

Singleton Pattern

by 최고영회 2013. 12. 21.
728x90
반응형
SMALL

프로그램을 실행할 때 보통 많은 인스턴스가 생성된다.

예를 들어 java.lang.String 클래스의 인스턴스는 문자열 1개에 대해서 1개가 생성되기 때문에 문자열 1,000 개 등장하면 1,000 개의 인스턴스가 만들어 진다.

 

그러나 '클래스의 인스턴스가 단 하나만 필요' 한 경우도 있다.

 

물론 주의를 기울여 new MyClass() 가 1회만 실행되도록 작성하면 된다. 그러나 '프로그래머가 주의를 기울여서 1개만 생성되는 것' 이 아니라

 

- 지정한 클래스의 인스턴스가 절대로 1개밖에 존재하지 않는 것을 보증 하고 싶을 때

- 인스턴스가 1개밖에 존재하지 않는 것을 프로그램 상에서 표현하고 싶을 때

 

우리는 Singleton 패턴을 사용한다.

 

Singleton class를 만들어 보자.

 public class Singleton {

  private static Singleton sin = new Singleton();

  private Singtone() { 

      System.out.println("인스턴스를 생성 완료");

  }

  public static Singleton getInstance() { 

      return sn;

  }

}

 

 

test

 public class Main {

  public static void main(String args[]) {

     System.out.println("start");

     Singleton obj1 = Singleton.getInstance();

     Singleton obj2 = Singleton.getInstance();

     if ( obj1 == obj2 ) {

       System.out.println("obj1 과 obj2 는 같은 인스턴스");

     } else { 

       System.out.println("obj1 과 obj2 는 다른 인스턴스");

     }

     System.out.println("End");

  }

 }

 

 

인스턴스의 수를 왜 제한하는 것일까?

- 복수의 인스턴스가 존재하면 인스턴스들이 서로 영향을 미치고, 뜻하지 않은 버그가 발생할 가능성이 있다. 그러나 인스턴스가 1개밖에 없다라는 보증이 있으면 그 전제조건 아래에서 프로그래밍 할 수 있다.

 

아래의 Singleton 클래스는 엄밀하게 말하면 Singleton pattern 이 아니다. 왜일까? (생각해 보세요)

 public class Singleton {

  private static Singleton sin = null;

  private Singtone() { 

      System.out.println("인스턴스를 생성 완료");

  }

  public static Singleton getInstance() { 

      if ( sin == null ) {

          sin = new Singleton();

      }

      return sin;

  }

}

 

728x90
반응형
LIST