Singleton pattern


소프트웨어 디자인 패턴이다.

어떤 클래스가 오직 하나의 객체만을 갖도록 하며, 프로그램 전반에 걸쳐 그 객체 하나만 사용되도록 보장해야 한다.


인스턴스를 여러 개 만들게 되면 자원을 낭비하게 되거나 버그를 발생시킬 수 있어

정확히 하나만 생성되어야 하는 전역 객체를 구현해야 할 때 유용하다.


그러나 Singleton은 프로그램을 작은 단위로 나눠 각 단위의 동작을 테스트하는 단위 테스트(unit test)에는 방해되는 점이 있다.

단위 테스트를 할 경우 각 테스트 함수는 독립적이여야하는데, 싱글턴을 사용할 경우 다른 테스트 함수에 영향을 끼칠수 있기 때문이다.



Lazy initialization pattern

싱글턴 패턴 중 하나로, 필요할때 인스턴스를 생성시킨다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 하나의 인스턴스만을 유지하기 위해 인스턴스 생성에 제약을 둔다.
public class Singleton {
    
    // 단일 객체를 참조할 static 참조변수가 필요
    private static Singleton instance;
 
    // new를 실행할 수 없도록 생성자에 private 접근 제어자를 지정
    private Singleton() {}
    
    // 단일 객체를 반환할 수 있도록 static 메서드를 지정 
    public static Singleton getInstance() {
        if (instance == null)
            instance = new Singleton();    // 인스턴스가 null일 때만 객체 생성
        
        return instance;
    }
}
cs


최초 사용 시점에만 인스턴스화 시키기 때문에 메모리 부담이 줄게 되지만, 멀티 스레드 환경에서 문제가 발생할 수 있다.

동일 시점에 getInstance() 메서드를 호출하면 인스턴스 두 개가 생성될 수 있기 때문에 이 메서드를 동기화 시켜야 한다. 



참고 출처: http://asfirstalways.tistory.com/335

'Design Pattern' 카테고리의 다른 글

팩토리 메서드 패턴 (Factory Method Pattern)  (0) 2018.11.15

+ Recent posts