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() 메서드를 호출하면 인스턴스 두 개가 생성될 수 있기 때문에 이 메서드를 동기화 시켜야 한다.
'Design Pattern' 카테고리의 다른 글
팩토리 메서드 패턴 (Factory Method Pattern) (0) | 2018.11.15 |
---|