규칙 18.인터페이스는 자료형을 정의할 때만 사용하라

인터페이스를 구현하는 클래스를 만들게 되면 그 인터페이스는 해당 클래스의 객체를 참조할 수 있는 자료형(type)역할을 하게된다. 인터페이스를 구혆 클래스를 만든다는 것은, 해당 클래스의 객체로 어떤 일을 할 수 있는지 클라이언트에게 알리는 행위다. 다른 목적으로 인터페이스를 정의하고 사용하는것은 적절치 못하다.
적절하지 못한예: 상수 인터페이스(메서드가 없고 static final 필드만 있음)가 있다. 상수 정의를 인터페이스에 포함시키면 구현 세부사항이 클래스의 공개 API에 스며들게 된다. 다음번 릴리스에서 더 이상 그런 상수를 사용하지 않도록 변경할 것이라 해보자. 그렇다 해도 호환성을 보장하려면 그인터페이스를 계속 구현해야 한다.
상수를 API일부로 공개하고 싶을때는 더 좋은 방법이 있다. 상수가 존재하는 클래스나 인터페이스에 강하게 연결되어있을 때는 그 상수들을 해당 클래스나 인터페이스에 추가해야 한다. 그렇지 않을 경우에는 상수들을 객체 생성이 불가능한 유틸리티 클래스에 넣어서 공개해야 한다.

1
2
3
4
5
6
public class PC{
private PC(){}
public static final double HI = 10.0;
public static final double BYE = 20.0;

}

위와같은 PC 클래스를 사용할 일이 많다면 JDK 1.5부터 도입된 저억 임포트 기능을 사용하면 클래스이름을 제거할 수 있다.

1
2
3
4
5
6
7
import static com.sh.PC.*;
public class Test{
double getHi() {
return HI;
}

}
Share