블로그   태그   위치로그   이웃로그   방명록
          
 
 
05-06 22:43
 
 
     
 
  싱글톤 패턴 Singleton Pattern  +   [Java]   |  2013. 4. 10. 10:51

소프트웨어 공학에서 싱글톤 패턴이란 하나의 클래스가 오직 하나의 오브젝트만 생성하고, 이것을 전역적으로 접근할 수 있게 하는 디자인 패턴이다. 이는 전체 프로그램에서 오브젝트가 오직 하나만 생성되어야 하는 경우에 사용한다.


이전부터 개발자들에게 간간히 쓰여졌는데, 폭발적으로 알려지게 된 계기는 이른바 GoF, Gang of Four라고 알려진 책 Design Patterns: Elements of Reusable Object-Oriented Software을 통해 사람들에게 널리 알려졌기 때문이다.


자바에선 일반적으로 두가지 방법이 사용된다.



게으른 초기화 Lazy initialization


public class SingletonDemo { private static SingletonDemo instance = null; // =null은 생략해도 무관. 싱글톤 데모 클래스에 대해 레퍼런스 변수만 선언 private SingletonDemo() {} //private 생성자를 만들어서 다른곳에서 객체를 생성하지 못하게 한다. public static SingletonDemo getInstance() { //public getInstance 메소드로 다른곳에서 접근 가능하게 만든다. if (instance == null) {                     instance = new SingletonDemo (); 싱글톤 객체 생성 } return instance; } }




이경우 멀티쓰레드 프로그램에서 두 개 이상의 쓰레드가 같은 클래스를 참조할 때 문제가 되기 때문에 Double Checked Locking을 사용하여 인스턴스가 생성되었는지 확인 후 생성되어있지 않을 때 동기화한다.


public class SingletonDemo {
        private static volatile SingletonDemo instance = null;
 
        private SingletonDemo() {       }
 
        public static SingletonDemo getInstance() {
                if (instance == null) {
                        synchronized (SingletonDemo .class){
                                if (instance == null) {
                                        instance = new SingletonDemo ();
                                }
                      }
                }
                return instance;
        }
}






부지런한 초기화 Eager initialization

번역은 임의로 하였으며 이것이 표준적으로 사용되는 말은 아니다

부지런한 초기화는 프로그램이 항상 인스턴스가 필요할 때나 인스턴스를 생성하는 비용이나 시간이 크지 않을 때 사용한다.



public class Singleton { private static final Singleton instance = new Singleton(); //레퍼런스 변수 선언과 동시에 인스턴스 생성 private Singleton() {} //생성자 지정으로 다른 클래스에서 객체 생성을 막음 public static Singleton getInstance() { //getInstance로 전역적인 접촉점 제공 return instance; } }



그 외 Static block initialization, The solution of Bill pugh, Enum way등이 있지만 다루지 않는다.





 
  
 
   

데드캣's Blog is powered by Daum & tistory