public class Elvis {
public static final Elvis INSTANCE = new Elvis();
private Elvis() {}
}
INSTANCE를 초기화할 때 딱 한 번 호출된다.AccessibliObject.setAccessible())를 통해 private 생성자를 호출하지 않는 이상 싱글턴이 보장된다.
public class Elvis {
public static final Elvis INSTANCE = new Elvis();
private Elvis() {}
public static Elvis getInstance() { return INSTANCE; }
}
Elvis.getInstance()는 항상 같은 객체 참조를 반환하므로 싱글턴이 보장된다.
getInstance() 내부 구현만 변경하면 된다.Elvis::getInstance를 Supplier<Elvis>로 사용Serializable을 구현하는 것만으로는 부족하다.
transient)라 선언하고 readResolve() 메서드를 제공해야 한다.public enum Elvis {
INSTANCE;
}