싱글턴(singleton)이란?
→ 인스턴스를 오직 하나만 생성할 수 있는 클래스!
mock
구현으로 대체할 수 없다!싱글턴을 만드는 방식
→ 두 방식 모두, 생성자는 private
으로 감춰두고, 유일한 인스턴스에 접근할 수 있는 수단으로 public static
멤버를 하나 마련해둔다.
public static
멤버가 final
필드인 방식의 싱글턴public class Elvis {
public static final Elvis INSTANCE = new Elvis();
private Elvis() { ... }
public void leaveTheBuilding() { ... }
}
private
생성자는 public static final
필드인 Elvis.INSTANCE
를 초기화할 때 딱 한 번만 호출된다.
public
이나 protected
생성자가 없으므로,클래스가 초기화될 때 만들어진 인스턴스가 전체 시스템에서 하나뿐임이 보장된다.예외로, 권한이 있는 클라이언트는 리플렉션 API인 AccessibleObject.setAccessible
을 사용해 private
생성자를 호출할 수 있다.
장점 : 해당 클래스가 싱글텀임이 API에 명백히 드러나고, 간결하다.
public class Elvis {
private static final Elvis INSTANCE = new Elvis();
private Elvis() { ... }
public static Elvis getInstance() { return INSTANCE; }
public void leaveTheBuilding() { ... }
}
Elvis.getInstance
는 항상 같은 객체의 참조를 반환하므로, 제 2의 인스턴스는 만들어지지 않는다.