생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어준다. 즉, 매개변수를 받지 않는 public 생성자가 만들어지며, 사용자는 이를 자동 생성된 것인지 구분할 수 없다. 이처럼 의도치 않게 인스턴스화할 수 있게된 클래스가 종종 존재한다.
추상클래스로 만드는 것으로는 인스턴스화를 막을 수 없다. 하위 클래스를 만들어 인스턴스화를 하면 그만이다.
public class UtilityClass {
// 기본 생성자가 만들어지는 것을 막는다(인스턴스화 방지용)
private Utilityclass() {
throw new AssertionError();
}
}
컴파일러가 기본 생성자를 만드는 경우는 오직 명시된 생성 자가 없을 때뿐이니 private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다. 이처럼 private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다.
명시적 생성자가 private이니 클래스 바깥에서는 접근할 수 없다. 꼭 Assertion Error를 던질 필요는 없지만, 클래스 안에서 실수로라도 생성자를 호출하지 않도록 해준다. 이 코드는 어떤 환경에서도 클래스가 인스턴스화되는 것을 막아 준다.