싱글턴을 만드는 세가지 방법

  1. public static final 필드 방식의 싱글턴
public class Elvis {
	public static final Elvis INSTANCE = new Elvis();
	private Elvis() {...}
	
	public void leaveTheBuilding() {...}
}
  1. 정적 팩터리 방식의 싱글턴
    1. API를 바꾸지 않고도 싱글턴이 아니게 변경할 수 있다.
    2. 원한다면 정적 팩터리를 제네릭 싱글턴 팩터리로 만들 수 있다.
    3. 정적 팩터리의 메서드 참조를 공급자로 사용할 수 있다.
public class Elvis {
	private static final Elvis INSTANCE = new Elvis();
	private Elvis() {...}
	public static Elvis getInstance() {return INSTANCE;}
	
	public void leaveTheBuilding() {...}
}
  1. 열거 타입 방식의 싱글턴 - 바람직한 방법
public enum Elvis{
	INSTANCE;
	
	public void leaveTheBuilding() {...}
}