인터페이스
자신을 구현한 클래스의 인스턴스를 참조할수있는 타입역할
이 지침에 맞지않는 예로 상수 인터페이스가 있음
메서드 없이 상수를 뜻하는 static final로만 가득찬 인터페이스를 의미
잘못된 예
상수인터페이스 안티패턴
public interface PhysicalConstants {
static final double AVOGROS_NUMBER= 6.022_140_857e23;
//볼츠만 상수
static final double BOLTZAMAN_CONSATANT=1.380-648_52e-23;
static final double ELECTRON_MASS= 9.109_383_56e-31;
}
클래스내부에서 사용하는 상수는 외부 인터페이스가 아닌 내부 구현에 해당한다.
상수 인터페이스를 구현하는것은 클래스가 어떤 상수 인터페이스를 사용하던 사용자에게 의미가없고, 혼란을 주기도하며, 클라이언트 코드가 내부 구현에 해당하는 상수들에 종속
상수를 공개할 목적이라면?
1)특정클래스나 인터페이스게 강하게 연관된 상수라면 클래스나,인터페이스 자체에 추가해야한다.
상수유틸리티 클래스
public class PhysicalConstants {
//인스턴스화 방지
private PhysicalConstants(){
}
static final double AVOGROS_NUMBER= 6.022_140_857e23;
//볼츠만 상수
static final double BOLTZAMAN_CONSATANT=1.380-648_52e-23;
static final double ELECTRON_MASS= 9.109_383_56e-31;
}
유틸리티 클래스의 상수를 빈번히 사용한다면 정적 임포트하여 클래스 이름은 생략가능하다.
public class Test {
double atoms(double moles){
return AVOGROS_NUMBER*moles;
}
// PhysicalConstants를 빈번하 사용한다면 정적 임포트가 값어치를 한다.
}
인터페이스는 타입을 정의하는 용도로만 사용해야한다.
상수 공개용 수단으로 사용하지말자!