싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 즉, 객체나 설계상 유일해야 하는 시스템 컴포넌트이다.
싱글턴은 인스턴스를 mock으로 대체할 수 없기 때문에 테스트에 어려움이 있을 수 있다.
싱글턴을 만드는 방식은, 보통 아래 두 방법 중 하나다.
public class Elvis{
public static final Elvis INSTANCE = new Elvis();
private Elvis() {...}
public void leaveTheBuilding() {...}
}
public class Elvis{
private static final Elvis INSTANCE = new Elvis();
private Elvis() {...}
public static Elvis getInstance() { retrun INSTANCE; }
public void leaveTheBuilding() {...}
}
[장점]
public static Elvis getInstance() { retrun new Elvis(); }
// 제네릭으로 타입설정 가능한 인스턴스를 만들어두고,
// 반환 시에 제네릭으로 받은 타입을 이용해 타입을 결정한다.
public class GenericFactoryMethod {
public static final Set EMPTY_SET = new HashSet();
public static final <T> Set<T> emptySet() {
return (Set<T>) EMPTY_SET;
}
}
출처: https://jake-seo-dev.tistory.com/13 [제이크서 블로그]
Elvis::getInstace를 Supplier<Evlis> 로 사용한다.
public enum Elvis{
// 인스턴스는 하나만 만들 수 있음
INSTANCE;
public String getName() {
return "아무개";
}
}
String name = Elvis.INSTANCE.getName();