아이템4. 인스턴스화를 막으려거든 private 생성자를 사용하라

정적 필드와 정적 메서드를 모아놓고 사용하는 것이 유용할 때가 있다. 예를 들어 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() {}

    // ...
}

Written by@슬로
느리지만 꾸준하게 나아갑니다.