less than 1 minute read

item22 인터페이스는 타입을 정의하는 용도로만 사용하라.

상수 인터페이스

  • 메서드 없이 상수를 뜻하는 static final 필드로만 가득 찬 인터페이스
  • 상수 인터페이스를 구현하는 것은 내부 구현을 API로 노출하는 행위이며, 오히려 사용자에게 혼란을 야기할 수 있다. 클라이언트 코드가 내부 구현에 해당하는 상수에 종속되게 할 가능성도 있다.
public interface PhysicalConstants {
    // 아보가드로 수 (1/몰)
    static final AVOCADOS_NUMBER = 6.022_140_857e23;
    
    // 볼츠만 상수 (J/K)
    static final BOLTZMANN_CONSTANT = 1.380_648_52e-23;
    
    // 전자 질량(kg)
    static final ELECTRON_MASS = 9.109_383_56e-31;
}

해결법

  • 특정 클래스나 인터페이스와 강하게 연관된 상수라면 클래스나 인터페이스 자체에 추가하거나, 인스턴스화할 수 없는 유틸리티 클래스에 담아 공개하는 것이 좋다.
    • 유틸리티 클래스의 상수를 사용하는 경우 클래스 이름까지 명시해야 하나, 자주 사용하는 상수인 경우 정적 임포트(static import)를 사용해 클래스 이름을 생략할 수 있다.
// 상수 유틸리티 클래스 
public class PhysicalConstantsUtil {
    private PhysicalConstantsUtil() {}
    
    // 아보가드로 수 (1/몰)
    public static double AVOCADOS_NUMBER = 6.022_140_857e23;

    // 볼츠만 상수 (J/K)
    public static double BOLTZMANN_CONSTANT = 1.380_648_52e-23;

    // 전자 질량(kg)
    public static double ELECTRON_MASS = 9.109_383_56e-31;
}

Leave a comment