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;
}