정적 메서드와 정적 필드만을 담은 클래스가 필요한 경우는 아래와 같다.
java.lang.Math
, java.util.Arrays
java.util.Collections
final
클래스와 관련한 메서드들을 모아놓을 때private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다.
public class UtilityClass {
// 기본 생성자가 만들어지는 것을 막는다(인스턴스화 방지용).
private UtilityClass() {
throw new AssertionError();
}
...
}
생성자가 존재하는데 호출할 수 없으므로 직관적이지 못한 코드이다. 따라서 주석을 달아주어야 한다.
하위클래스가 상위클래스에 접근할 수 없으므로 상속을 불가능하게 하는 효과도 있다.
조슈아 블로크Joshua Bloch, 『이펙티브 자바 Effective Java 3/E』, 개앞맵시(이복연) 옮김, 인사이트(2018), p26-27.