참고 : JAVA 언어로 배우는 디자인 패턴 입문
클래스의 인스턴스가 단 하나만 필요한 경우가 있습니다. 그것은 시스템 안에서 한 개 밖에 존재하지 않는 것을 프로그램으로 표현하고 싶을 때입니다. 인스턴스가 한 개밖에 존재하지 않는 것을 보증하는 패턴을 Singleton 패턴이라고 합니다.
생성자 Singleton의 앞부분에 - 가 붙어있는 것은 Singleton이 private인 것을 명시하기 위해서 입니다. 또한 메소드 getInstance에 밑줄이 그어져 있는 것은 이 메소드가 static 메소드(클래스 메소드)이기 때문입니다. 이것은 UML 약속입니다.
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {
System.out.println("인스턴스를 생성했습니다.");
}
public static Singleton getInstance(){
return singleton;
}
}
public class Main {
public static void main(String[] args) {
System.out.println("Start!");
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();
if( obj1 == obj2 ) {
System.out.println("obj1과 obj2는 같은 인스턴스입니다.");
} else {
System.out.println("obj1과 obj2는 다른 인스턴스입니다.");
}
System.out.println("End.");
}
}
Q. Singleton 패턴에서는 인스턴스의 수를 제한하고 있습니다. 왜 일부러 제한적인 프로그래밍을 하는 것일까요?
복수의 인스턴스가 존재하면 인스턴스들이 서로 영향을 미치고, 뜻하지 않은 버그가 발생 할 가능성이 있습니다.
그러나 인스턴스가 한 개밖에 없다라는 보증이 있으면 그 전제조건 아래에서 프로그래밍 할 수 있습니다.