정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 게 아니다.
추상 클래스로 만드는 것으로 인스턴스화를 막을 수는 없다. 추상 클래스를 상속하면 인스턴스화가 얼마든지 가능하다.
abstract class Cup {
private final int size = 0;
}
class GlassCup extends Cup {
}
Cup cup = new GlassCup();
어떤 생성자도 만들지 않으면 컴파일러는 자동으로 기본 생성자를 생성해 주기 때문에 private 생성자를 만들어주어야 한다.