싱글턴(singleton) 이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다.
싱글턴을 만드는 방식은 보통 두 가지가 존재한다.
두 가지 방법을 코드로 분석해보자
public class Student{
public static final Student INSTANCE = new Student();
private Student() {...};
public void Build() {...};
}
이처럼 생성자를 private 으로 감추어두고, 유일하게 인스턴스에 접근할 수 있는 수단으로
public static 멤버를 하나 마련해둔다.
이러면 private 생성자는 Student.INSTANCE를 초기화 할 때, 단 한번만 호출된다.
public class Student{
private static final Student INSTANCE = new Student();
private Student() {...};
public static Student getInstance() {
return INSTANCE;
}
public void Build() {...};
}
정적 팩터리 방식 역시 생성자를 private으로 만들고 호출자를 public static으로 만들어 이용한다.
두 방식 모두 공통적으로 private 생성자를 이용하는 방식이다.
그러나 장점은 각기 다른데 첫 번째 방식의 경우 final을 사용 했기 때문에 초기값 이외의 다른 객체를 참조할 수 없다. 또한 멤버 변수이름을 통해 싱글턴임을 확실히 드러나게 할 수 있다.