싱글턴(singleton) 이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다.

싱글턴을 만드는 방식은 보통 두 가지가 존재한다.

  1. public static final 필드 방식
  2. 정적 팩터리 방식

두 가지 방법을 코드로 분석해보자

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을 사용 했기 때문에 초기값 이외의 다른 객체를 참조할 수 없다. 또한 멤버 변수이름을 통해 싱글턴임을 확실히 드러나게 할 수 있다.