하나의 인스턴스만을 가져도 되는 상황에서 사용하는 패턴으로 단 하나의 인스턴스만을 갖는 것이 보증이되는 방식이다
사용예시
데이터베이스를 관리하기 위한 데이터베이스 관리자 객체를 사용할 때마다 생성할 필요가없을 때 유일한 관리자 객체를 사용하는 방법 등으로 이용할수 있다
private static void singleton() {
//new를 사용하지 않고 객체를 사용하는 방법 (하나의 객체만을 이용)
Singleton singleton1 = Singleton.getSingleton();
Singleton singleton2 = Singleton.getSingleton();
if (singleton1 == singleton2)
System.out.println("same");
else
System.out.println("not same");
//new를 이용하여 별개의 객체를 생성하는 경우
String testNoSingleton1 = new String("Test");
String testNoSingleton2 = new String("Test");
if (testNoSingleton1 == testNoSingleton2)
System.out.println("sameTest");
else
System.out.println("not sameTest");
}
singleton() 실행
//same <-- 동일한 객체이다
//not sameTest <-- 각 문자열은 별개의 객체이다
내가 객체의 인스턴스를 유일하게 갖고 싶은 클래스를 선언한다
public class Singleton {
//객체를 생성하는 곳
private static final Singleton sInstance = new Singleton();
//pulic이 아닌 private로 변경함으로서 생성자를 통한 new를(객체 생성을) 방지한다
private Singleton() {
}
//생성된 객체는 getInstance()메소드를 통해서만 접근이 가능하다
public static Singleton getInstance() {
return sInstance;
}
}
아래 방법을 막아야 추가적인 객체 생성을 방지할 수 있다
생성자를 public에서 private로 접근을 막는다
Singleton singleton3 = new Singleton();