[SingleTone패턴] Thread Safe 싱글톤 패턴 으로 객체를 정적으로 사용해보자~ ^^

2007. 2. 13. 09:50Java

SingleTone패턴


솔직히 저는 싱글톤 예찬론자는 아니지만,
static으로 묶인 클래스 보다는 싱글톤으로 유연성있게 제작하는 것을 좋아 합니다.

가장 간단한 싱글톤 방식은 어떤걸까요.

public static class SingleTon {
   private String name = null;
   private static SingleTon instance = null;
   private Blank blank = null;


   private SingleTon() {
        blank = new Blank();
   }

   public static SingleTon get() {
         synchronized(SingleTon.class) {
            if(instance==null) instance = new SingleTon();
            return instance;
         }
   }
   public String setName(String name) { this.name =name; }
   public String getName() { return name; }

   public static getBlank() {
          return SingleTon.get().blank;
   }

}

이 방식은 제가 제일 즐겨 쓰는 방식입니다. 또한 쓰레드에 Safe 합니다. 바로 get() 에서 synchronized 했기 때문이죠. 대부분 이부분을 많이 빠뜨리십니다.~ 허허.
자 이렇게 했을때 접근은 어떻게 할까요. 다음과 같이 하면 됩니다.

String name = SingleTon.get().getName();


static 처럼 이렇게 가져다 쓸수 있습니다. 항상 어디에서 호출하든 같은 영역을 동일 하게 사용하지요. 더구나 Thread safe 합니다. 환상이지요.

다음은 예를 들어 SingleTon안에 다른 클래스의 인스턴스를 저장하고 공통적으로 사용할때 저는 이렇게 사용합니다. Depth를 줄이는 거지요.

SingleTon.get().getBlank() 보단 , SingleTon.getBlank() 가 더 나아 보이지 않나요?

물론 남발은 좋지 않습니다. 규격성도 떨어지지요.~ 하지만 중요하고 자주 사용하는 부분은 이렇게 하면 나중에 수정도 용이 합니다.

주의 할점은. 싱글톤은 만능이 아닙니다.
디자인 패턴을 무조건 따라하지 마세요. 오히려 독이 될수도 있습니다.
interface를 사용할 필요도 없는데, 멋지게 만든다고 패턴처럼 한다고 해서 성능이 좋아지지 않습니다. 오히려 크기만 커지고 나중에 머가 먼지도 모릅니다. 그런소스를 보면 짜증이 납니다. ㅡ.ㅡ;

자기에게 맞는, 꼭 필요한 곳에 쓰는 것이 최고죠.
요점은 이겁니다.

" 쓸데없이 디자인 패턴을 남발하지 말자."


ㅎㅎ 싱글톤 얘기하다가 이런 얘기까지~
by ncanis(조성준)