본문 바로가기
Java

singleton pattern 설명

by 무대포 개발자 2020. 10. 29.
728x90
반응형

singleton pattern 설명

  • singleton pattern 이란 인스턴스를 하나만 만들어서 사용하는 것.
  • 이렇게 하는 이유는 비즈니스 로직상 굳이 공통된 인스턴스를 사용해도 될 때. 사용할 때마다 만드는게 아니라 하나만 만들어서 재활용하면 자원 절약이 되기에
  • 예를 들면, 환경 Config 등은 하나의 인스턴스만 있어도 되니 싱글톤 패턴을 이용
public class Singleton {
  // Private constructor prevents instantiation from other classes
  private Singleton(){}

  /**
  * SingletonHolder is loaded on the first execution of Singleton.getInstance() 
  * or the first access to SingletonHolder.INSTANCE, not before.
  */
  private final static class SingletonHolder {
      private final static Singleton instance = new Singleton();
  }

  public static Singleton getInstance() {
      return SingletonHolder.instance;
  }
}
  • 위 소스를 설명하면, getInstance() 호출되기 전까지는 Singleton Instance 가 생성되지 않음.
  • getInstance() 를 호출해야 인스턴스를 생성하는 지연 초기화 방식임.
  • 만약 초기에 동시에 getInstance 에 접근한다면 어떻게 될까?
    • 클래스 초기화 접근에는 동기화가 적용된다. (vm 에서 제어)
    • 한 번 초기화가 일어나면 동기화가 해제 됨.
  • getInstance 가 호출되서 new Singleton() 만들면, 2번 호출은 하지 않는다.

reference

댓글