인스턴스화를 막으려거든 private 생성자를 사용하라
static 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계하지 않는다. 하지만 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어준다. 따라서 의도치 않게 인스턴스화할 수 있게 된 클래스를 목격할 수 있다.
추상 클래스를 만드는 것으로는 인스턴스화를 막을 수 없다. 상속받아서 인스턴스화하면 되기 때문이다. 따라서 private 생성자를 추가해 클래스의 인스턴스화를 막을 수 있다.
public class UtilityClass {
//인스턴스화 방지
private UtilityClass() {
throw new AssertionError();
}
...
}
이 방식은 상속을 불가능하게 하는 효과도 있다. 하위 클래스는 상위 클래스의 생성자를 호출하게 되는데, 이를 private으로 선언했으니 하위 생성자가 상위 클래스의 생성자에 접근할 수가 없어진다.