static 메서드와 static 필드를 모아둔 클래스를 만들경우 클래스를 abstract으로 만들어도 인스턴스를 만드는 것을 막을 수 없다.
(상속으로 인스턴스 생성 가능)
private 생성자로 해결하자.
public abstract class UtilityClass{
private UtilityClass(){
throw new AssertionError();
}
public static String getName(){
return "Something";
}
}
AssertionError로 생성자 호출시 에러를 발생시킬 수 있고, private생성자로 상속도 막을 수 있다.
생성자를 막지 않았을 때
public abstract class UtilityClass{
static class AnotherClass extends UtilClass{
}
public static String getName(){
return "Something";
}
public static void main(String[] args){
AnotherClass antoherClass = new AnthorClass();
anotherClass.getName() // -> 생성된 인스턴스를 통해 메소드 사용 불가능
}
}
현실적으로 abstract정도만 사용하여도 괜찮다.