정적 유틸리티 클래스(static Utility Class)

: 정적 메서드(static method) & 정적 필드(static field)로만 구성된 클래스로, 인스턴스화를 의도적으로 막는 클래스

→ 객체지향의 취지에 어긋난다

정적 유틸리티 클래스의 필요

⇒ 인스턴스를 만들어서 사용하도록 설계된 클래스가 아니므로, 사용자로 하여금 해당 용도를 파악할 수 있게하기위해 인스턴스화를 막아두어야한다

클래스의 인스턴스화를 막는 방법

→ private 생성자를 추가

  1. 인스턴스화 불가능

  2. 상속 불가능

    → 모든 생성자는 묵시적으로 상위 클래스의 생성자를 호출하므로, private 생성자는 상속도 불가능하게 막아준다

    ** 해당클래스를 추상클래스로 만든다 하더라도 상속받으면 만들수 있기 때문에 의미가 없다

public class UtilityClass {

	//인스턴스화를 막는 용도의 private 생성자 -> 사용자를 헷갈리게 할 수 있으니 
	//인스턴스화가 불가능한 클래스라는 주석을 꼭 달아두도록 한다 
	prvite UtilityClass(){
		throw new AssertionError(); // 해당 클래스 내부에서도 생성자를 호출하지 못하도록 할 수 있다 
	}

	//원하는 메소드 등등.. (생략) 
}