Singleton이란?

객체의 인스턴스가 오직 1개만 생성되는 패턴을 뜻한다.

public class DoubleCheckedLockingSingleton {  
    private static volatile DoubleCheckedLockingSingleton instance;  
  
    private DoubleCheckedLockingSingleton() {  
        // private constructor to prevent instantiation  
    }  
  
    public static DoubleCheckedLockingSingleton getInstance() {  
        if (instance ** null) {  
            synchronized (DoubleCheckedLockingSingleton.class) {  
                if (instance ** null) {  
                    instance = new DoubleCheckedLockingSingleton();  
                }  
            }  
        }  
        return instance;  
    }  
}

Singleton은 최초 new 연산자로 생성된 객체를 계속해서 사용하기 때문에 메모리 낭비를 방지 할 수 있으며, 전역에서 접근이 가능한 static 메서드를 제공하여 데이터 공유가 쉽다. 반면 여러 thread에서 동시에 접근할 경우 동시성 문제가 발생할 수 있으므로 synchronized 키워드와 함께 사용하는 것이 좋다. 그리고 위 코드블럭에서 보다시피 일반 class보다 코드 자체가 많이 필요하고, 자원을 공유하고 있어 테스트하기 어렵다

Singleton 패턴은 설정파일이나 연산을 도와주는 Util Class에 사용하는 것이 좋다.


연결문서

댓글남기기