Effective Java 3/E 2장 생성자나 열거 탕비으로 싱클턴임을 보증하라

싱글턴은 인스턴스를 하나만 만들수 있는 패턴이다.

하지만 클래스를 싱글턴으로 만들면 싱글턴 인스턴스를 Mock 구현으로 대체 할 수가 없다

그렇게 되면 이를 사용하는 클라이언트를 테스트하기가 어려워지게 된다.

아주 복잡한 직렬화 상황이나 리플렉션 공격에서도 제2의 인스턴스가 생기는 일을 완벽히 막아준다.

대부분의 상황에서는 원소가 하나뿐인 열거 타입이 싱글턴을 만드는 가장 좋은 방법이다.

하지만 만약에 싱글턴이 Enum 외의 클래스를 상속해야 한다면 이 방법은 사용할 수 없다.