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

[디자인패턴] Singleton

by sosob 2023. 8. 31.
728x90

 

 

 

public class Singleton {

    private static Singleton instance = null;

    private Singleton() {
        // Private Constructor
    }

    /**
     * Multi thread 동기화해결을 위한 synchronized
     * 동시 접근으로 인한 인스턴스 중복 생성 문제 해결.
     * 인스턴스를 리턴 받을때마다 Thread 동기화로 인해 불필요한 lock이 자주 발생할 수 있어, 낭비가 큼.
     *
     */
    public synchronized static Singleton getInstance() {
        if (instance == null) { instance = new Singleton(); }
        return instance;
    }
}

 

 

LazyHolder 방식의 싱글톤을 사용하자!!

public class LazyHolderSingleton {

    private String mName = null;
    private LazyHolderSingleton() {
        // private Constructor
    }

    public static LazyHolderSingleton getInstance() {
        return LazyHolder.INSTANCE;
    }

    public String getName() { return mName; }
    /**
     * LazyHoler 를 통해 싱글톤의 동시성 문제 해결방법.
     * synchronized 를 사용하지 않음.
     * JAVA 버전에 상관없음.
     * JVM 에서 클래스 로딩 -> 초기화할 경우 원자성 보장으로 Thread safety
     */
    private static class LazyHolder {
        private static final LazyHolderSingleton INSTANCE = new LazyHolderSingleton();
    }
}

 

 

 

 

 

 

 

 

 

 

 

728x90