3. Constant interface?
• 메소드를 갖지 않고, 외부에 제공하는 상수 값을 갖는
static final 필드만으로 구성된다.
• Constant interface를 구현하는 클래스에서 상수 필드 앞
에 별도의 클래스 이름을 붙이지 않고 사용하기 위해 구현
한다.
4. Constant interface?
// Constant interface
public interface PhysicalConstants {
// 아보가드로 수
static final double AVOGADROS_NUMBER = 6.012414e23;
// 볼쯔만 상수
static final double BOLTZMANN_CONSTANT = 1.14214e-14;
// 전자 질량
static final double ELECTRON_MASS = 9.1514e-31;
}
5. Constant interface?
• 상세 구현이(상수가) 클래스 외부로 노출됨
• 상수가 필요 없어지더라도 binary 호환성을 유지하기 위
해 그 상수 interface를 유지
• subclass에서 상수 이름과 같은 이름의 변수 이용 못함
6. 상수를 외부로 제공하는 방법
• 상수가 기존클래스나 인터페이스와 밀접하게 관계 된다
면
– 해당 클래스나 인터페이스에 추가
ex) Integer나 Double의 MIN_VALUE, MAX_VALUE
• 열거타입의 멤버가 되는 것이 좋은 지 고려(enum)
• 유틸리티 클래스에 상수를 둠
7. 상수를 외부로 제공하는 방법
• 유틸리티 클래스에 상수를 둠
public class PhysicalcontantsUClass {
private PhysicalcontantsUClass() {
} // 인스턴트 생성 방지
static final double AVOGADROS_NUMBER = 6.012414e23;
static final double BOLTZMANN_CONSTANT = 1.14214e-14;
static final double ELECTRON_MASS = 9.1514e-31;
}
public class Test {
public static void main(String[] arg){
double boltzmann =
PhysicalcontantsUClass.BOLTZMANN_CONSTANT;
double avogadros =
PhysicalcontantsUClass.AVOGADROS_NUMBER;
double electron = PhysicalcontantsUClass.ELECTRON_MASS;
}
}
8. 상수를 외부로 제공하는 방법
• 유틸리티 클래스에 상수를 둠
public class PhysicalcontantsUClass {
private PhysicalcontantsUClass() {
} // 인스턴트 생성 방지
static final double AVOGADROS_NUMBER = 6.012414e23;
static final double BOLTZMANN_CONSTANT = 1.14214e-14;
static final double ELECTRON_MASS = 9.1514e-31;
}
import static test.PhysicalcontantsUClass.*;
public class Test {
public static void main(String[] arg){
double boltzmann = BOLTZMANN_CONSTANT;
double avogadros = AVOGADROS_NUMBER;
double electron = ELECTRON_MASS;
}
}
9. 요약
• 상수를 외부에 제공하기 위해 사용하면 안
됨.
• 즉, 인터페이스는 타입을 정의할 때만 사용.