정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 게 아니다.
인스턴스화를 막는 방법은 생각보다 간단하다.
// 인스턴스를 만들 수 없는 UtilityClass
public class UtilityClass {
// private 생성자를 명시하는것으로써 기본 생성자가 만들어지는 것을 막는다(인스턴스화 방지용)
// 아래 private 생성자를 작성하지 않을 경우 컴파일러가 public 기본 생성자를 만들어 인스턴스화와 상속을 가능하게 해서 문제가 발생된다.
private UtilityClass() {
throw new AssertionError();
}
// 나머지 코드는 생략
}
private 생성자 작성 후 정적 팩터리 메서드를 작성하면 반복 요청에 가능한 객체를 만들 수 있다.