더북(TheBook)

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/CollectionsPath/Paths 같은 인터페이스와 유틸리티 클래스의 쌍을 볼 수 있다. 하지만 이런 분할이 더는 필요 없다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.