ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java - 싱글턴(Singleton) 패턴
    Java 2022. 5. 30. 20:26
    반응형

    싱글턴 패턴이란?

    1. 애플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(static) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴
    2. 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나고 최초 생성 이후에 호출된 생성자는 최초에 생성한 객체를 반환
    3. 다른 클래스 인스턴스들과 데이터 공유가 쉬움
    4. Database Connection Pool처럼 공통된 객체를 여러개 생성해서 사용해야하는 상황에서 많이 사용(쓰레드풀, 캐시, 로그 기록 객체등)
    5. anti-pattern이므로 가급적 사용하지 않는 것이 좋음

     

    싱글턴 패턴의 문제점

    1. 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우 다른 클래스 인스턴스들 간의 결합도가 높아져 "개방-폐쇄 원칙"을 위배하게 된다.
    2. 수정, 테스트가 어려움

     

    싱글턴(Singleton) 생성 예제

     

    1. Double Checked Locking

     

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

     

     

    2. Lazy Holder

     

    public class Singleton {
      private Singleton() {}
      public static Singleton getInstance() {
        return LazyHolder.INSTANCE;
      }
      
      private static class LazyHolder {
        private static final Singleton INSTANCE = new Singleton();  
      }
    }
    반응형

    댓글

Designed by Tistory.