: 정적 메서드(static method) & 정적 필드(static field)로만 구성된 클래스로, 인스턴스화를 의도적으로 막는 클래스
→ 객체지향의 취지에 어긋난다
final 클래스를 상속하여 하위클래스 메서드를 넣는 것이 불가능하기 때문에 필요
** final class : 상속 불가능 클래스( ex. “Integer” Wrapper class)
⇒ 인스턴스를 만들어서 사용하도록 설계된 클래스가 아니므로, 사용자로 하여금 해당 용도를 파악할 수 있게하기위해 인스턴스화를 막아두어야한다
→ private 생성자를 추가
인스턴스화 불가능
상속 불가능
→ 모든 생성자는 묵시적으로 상위 클래스의 생성자를 호출하므로, private 생성자는 상속도 불가능하게 막아준다
** 해당클래스를 추상클래스로 만든다 하더라도 상속받으면 만들수 있기 때문에 의미가 없다
public class UtilityClass {
//인스턴스화를 막는 용도의 private 생성자 -> 사용자를 헷갈리게 할 수 있으니
//인스턴스화가 불가능한 클래스라는 주석을 꼭 달아두도록 한다
prvite UtilityClass(){
throw new AssertionError(); // 해당 클래스 내부에서도 생성자를 호출하지 못하도록 할 수 있다
}
//원하는 메소드 등등.. (생략)
}