가끔 단순히 정적 메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때가 있다.

public final class Math {

    public static final double E = 2.7182818284590452354;

    public static final double PI = 3.14159265358979323846;

    private static final double DEGREES_TO_RADIANS = 0.017453292519943295;

    private static final double RADIANS_TO_DEGREES = 57.29577951308232;
}

정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 게 아니다!

<aside> 💡 그렇다면, 인스턴스화를 막을 수 있는 방법은?

</aside>

컴파일러가 기본 생성자를 만드는 경우는 명시된 생성자가 없을 때 뿐이니, private 생성자를 추가하면 된다!

public class UtilityClass {

		private UtilityClass() {
				throw new AssertionError();
		}

		...
}

그렇다면, 테스트 코드를 작성할 수 있을까?

리플렉션 기능을 사용하면 가능하긴 하다!