3.2.1 정적 메서드
기술적으로 보면 인터페이스에 정적 메서드를 넣지 못할 이유는 없었지만, 인터페이스를 추상 명세로 보는 관점에는 맞지 않았다. 이런 사고가 이제는 진화했는데, 특히 팩토리 메서드는 인터페이스에 아주 잘 맞는다. 예를 들어 IntSequence 인터페이스에는 주어진 정수의 숫자 시퀀스를 만들어 내는 정적 메서드인 digitsOf를 둘 수 있다.
IntSequence digits = IntSequence.digitsOf(1729);
이 메서드는 IntSequence 인터페이스를 구현한 클래스의 인스턴스를 돌려주지만, 호출자는 이 인스턴스가 어느 클래스의 인스턴스인지 신경 쓸 필요가 없다.
public interface IntSequence {
...
static IntSequence digitsOf(int n) {
return new DigitSequence(n);
}
}
Note ≣
예전에는 보통 정적 메서드를 동반 클래스(companion class)에 두었다. 자바 API에서 Collection/Collections나 Path/Paths 같은 인터페이스와 유틸리티 클래스의 쌍을 볼 수 있다. 하지만 이런 분할이 더는 필요 없다.