[Effective Java 3/e] 아이템 22 - 인터페이스는 타입을 정의하는 용도로만 사용하라
아이템 22 - 인터페이스는 타입을 정의하는 용도로만 사용하라
상수 인터페이스 안티패턴 - 사용금지
public interface PhysicalConstants {
static final double AVOGADROS_NUMBER = 6.022_140_857e23;
static final double BOLTZMANN_CONSTANT = 1.380_648_52e-23;
static final double ELECTRON_MASS = 9.109_383_56e-31;
}
- 상수 인터페이스 안티패턴은 인터페이스를 잘못 사용한 예
- 클래스 내부에서 사용하는 상수는 내부 구현에 해당
- 내부 구현을 클래스의 API로 노출하는 행위
- 클라이언트 코드가 이 상수들에 종속되게 한다.
- 클래스 내부에서 사용하는 상수는 내부 구현에 해당
상수를 공개해야 하는 경우
- 특정 클래스나 인터페이스와 강하게 연관된 상수라면 그 클래스나 인터페이스 자체에 추가해야 한다.
- ex) Integer와 Double에 선언된 MIN_VALUE, MAX_VALUE
- 열거 타입으로 만들어 공개
- 인터스턴스화 할 수 없는 유틸리티 클래스에 담아 공개
상수 유틸리티 클래스
public class PhysicalConstants {
private PhysicalConstants() {} //인스턴스화 방지
public static final double AVOGADROS_NUMBER = 6.022_140_857e23;
public static final double BOLTZMANN_CONSTANT = 1.380_648_52e-23;
public static final double ELECTRON_MASS = 9.109_383_56e-31;
}