싱글턴을 만드는 방식
public static final 필드 방식의 싱글턴
public class A{
public static final A INSTANCE = new A();
private A(){};
}
- 해당 클래스가 싱글턴임이 API 명백히 드러난다.
- 간결하다.
정적 팩터리 방식의 싱글턴
public class A {
private static final A INSTANCE = new A();
private A(){};
public static A getInstance(){
return INSTANCE;
}
}
- API 를 바꾸지 않고도 싱글턴이 아니게 변경할 수 있다.
- 팩터리 메서드에서 INSTANCE 를 반환할 때 새로운 객체를 생성해서 반환하는 방식으로 바꾸면 된다.
- 정적 팩터리를 제너릭 팩터리로 바꿀 수 있다 (#30 내용에 있음)
열거 타입 방식의 싱글턴
public enum A{
ISNTANCE
}
- 대부분의 상황에서 원소가 하나뿐인 열거 타입이 싱글턴을 만든느 가장 좋은 방법이다.
- A 타입의 INSTANCE 는 하나뿐이고 더 이상 만들 수 없다.
- 다만, 만들려는 싱글턴이 Enum 이외의 다른 상위 클래스를 상속해야 한다면 이 방법은 사용할 수 없다.