2022.03.07
정적 필드와 정적 메서드를 모아놓고 사용하는 것이 유용할 때가 있다. 예를 들어 java.lang.Math와 java.util.Arrays 클래스처럼 기본 타입 값이나 배열 관련 메서드를 모아 놓을 수 있다. 또한, java.util.Collections처럼 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드를 모아놓을 수 있다. 그리고 문자열을 조작하는 기능을 모아둔 StringUtils 클래스도 있다.
다음 코드는 StringUtils 클래스의 일부분이다.
public final class StringUtils {
private StringUtils() { }
public static boolean isBlank(String str) {
return (str == null || str.trim().isEmpty());
}
public static boolean isNotBlank(String str) {
return !isBlank(str);
}
// ...
}
이러한 정적 메서드와 정적 필드만을 담은 유틸 클래스는 인스턴스로 만들어 사용하려고 설계한 것이 아니다. 하지만, 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어 주기 떄문에 사용자는 이 생성자가 자동으로 생성된 것인지 구분할 수 없다.
인스턴스화를 막기 위해서는 private 생성자를 명시
하면 된다.
public class UtilClass {
private UtilClass() {}
// ...
}