여기에 모든 좋은 답변이 있습니다. 인터페이스에서 정적 함수의 또 다른 실용적인 사용법을 추가하고 싶습니다. 팁은 Chapter2 : Creating and Destroying Object에있는 Joshua Bloch의 저서-Effective Java, 3rd Edition에서 온 것입니다.
Static functions can be used for static factory methods.
정적 팩토리 메서드는 객체를 반환하는 메서드입니다. 그들은 생성자처럼 작동합니다. 특정 경우에 정적 팩토리 메서드는 생성자를 사용하는 것보다 더 읽기 쉬운 코드를 제공합니다.
책에서 인용-Joshua Bloch의 효과적인 자바, 3 판
Java 8 이전에는 인터페이스에 정적 메서드가 없었습니다. 관례 적으로 Type이라는 인터페이스에 대한 정적 팩토리 메서드는 Types라는 이름의 인스턴스화 할 수없는 동반 클래스 (항목 4)에 배치되었습니다.
Author는 이러한 정적 팩토리 메서드가 구현 된 컬렉션의 예를 제공합니다. 코드를 확인하면 Josh Bloch는 Collections 클래스의 첫 번째 작성자로 볼 수 있습니다. Collections는 인터페이스가 아닌 클래스이지만. 그러나 개념은 여전히 적용됩니다.
예를 들어, Java Collections Framework에는 수정 불가능한 컬렉션, 동기화 된 컬렉션 등을 제공하는 45 개의 인터페이스 유틸리티 구현이 있습니다. 이러한 거의 모든 구현은 인스턴스화 할 수없는 하나의 클래스 (java.util.Collections)에서 정적 팩토리 메소드를 통해 내보내집니다. 반환 된 객체의 클래스는 모두 비공개입니다.
또한 그는 API가 더 작을뿐만 아니라 코드 가독성과 API 용이성에도 도움이된다고 설명합니다.
감소되는 것은 API의 대부분이 아니라 개념적 가중치입니다. 프로그래머가 API를 사용하기 위해 마스터해야하는 개념의 수와 난이도입니다. 프로그래머는 반환 된 객체가 인터페이스에서 지정한 API를 정확하게 가지고 있음을 알고 있으므로 구현 클래스에 대한 추가 클래스 문서를 읽을 필요가 없습니다.
다음은 java.util.Collections 클래스의 정적 메소드 중 하나입니다.
public static <T> Collection<T> unmodifiableCollection(Collection<? extends T> c) {
return new UnmodifiableCollection<>(c);
}