Item 4. 객체 생성을 막을 때는 private생성자를 사용하라.

때로는 정적 함수나 필드만 모은 클래스를 만들고 싶을 때가 있다.
예를 들어,

위와 같은 성격의 유틸리티 클래스(utility class)들은 객체를 만들 목적의 클래스가 아니다.

유틸리티 클래스를 만들때는 아래와 같이 생성자를 private으로 설정하여 JVM이 public 생성자를 만드는 것을 막는 것이 좋다.

public class UtilityClass {
	private UtilityClass(){
		throw new AssertionError(); // 리플렉션에 의한 private 생성자 호출 방지 ( 규칙 03번 참조 )
	}
}

또한, 위와 같이 private으로 선언하고 throw를 사용하여, 생성자 호출을 방지하면, 자식 클래스도 인스턴스를 만들수 없도록 강제 할 수 있다. 모든 생성자는 부모 클래스의 생성자를 명시적이든 아니면 무시적이든 호출 할 수 있어야 하는데, 호출 가능한 생성자가 부모 클래스에 없기 때문이다.