티스토리 뷰
상수를 정의하는 용도로 인터페이스를 사용하지 말 것
- 클래스 내부에서 사용할 상수는 내부 구현에 해당
- 내부 구현을 클래스의 API로 노출하는 행위가 된다
- 클라이언트에 혼란을 준다
- 다음 릴리스에서 이 상수들을 더는 쓰지 않게 되더라도 바이너리 호환성을 위해 여전히 상수 인터페이스를 구현해야한다
- ex) java.io.ObjectStreamConstants 등, 자바 플랫폼 라이브러리에도 상수 인터페이스가 몇 개 있으나, 따라해서는 안된다
public interface PhysicalConstants {
// 아보가드로 수 (1/몰)
static final double AVOGADROS_NUMBER = 6.02214076e23;
// 볼츠만 상수 (J/K)
static final double BOLTZMANN_CONSTANT = 1.38064852e-23;
// 전자 질량 (kg)
static final double ELECTRON_MASS = 9.10938356e-31;
}
상수를 정의하는 방법
- 특정 클래스나 인터페이스
- 열거형
- 인스턴스화 할 수 없는 유틸리티 클래스
public class PhysicalConstants {
private PhysicalConstants() { } // 인스턴스화 방지
// 아보가드로 수 (1/몰)
public static final double AVOGADROS_NUMBER = 6.02214076e23;
// 볼츠만 상수 (J/K)
public static final double BOLTZMANN_CONSTANT = 1.38064852e-23;
// 전자 질량 (kg)
public static final double ELECTRON_MASS = 9.10938356e-31;
}

