정적 메서드만을 담은 클래스
- java.lang.Math — 기본 타입 값 관련 메서드 모아놓은 클래스
- java.util.Arrays — 배열 관련 메서드를 모아놓은 클래스
- java.util.Collections — 특정 인터페이스(Collection)를 구현하는 객체를 생성해주는 정적 메서드(혹은 팩터리)를 모아놓을 수 있음 (java 8 이전에는 인터페이스에 정적 메서드 선언이 불가했기에, 해당 인터페이스(예 : “Type”) 를 반환하는 정적 메서드가 필요하면 (예 : “Types”) 와 같이 인스턴스화가 불가능한 동반 클래스를 만들어 사용하였음)
설명
- 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 게 아님. 하지만 생성자 명시하지 않으면 default 생성자가 만들어지기에 ⇒ 생성자를 private으로 만들어라!
- 그리고 그 생성자를 쓰지 않도록 주석도 덧붙이기
//open source 예시 public class Collections { // Suppresses default constructor, ensuring non-instantiability. private Collections() { } } public final class Math { /** * Don't let anyone instantiate this class. */ private Math() {} }
- 위와 같이 하면 상속을 불가능하게 하는 효과도 가짐. 모든 생성자는 명시적이든 묵시적이든 상위 클래스의 생성자를 호출하게 되는데, 이를 private으로 선언했으니 하위 클래스가 상위 클래스의 생성자에 접근할 길이 막힘