Item 19. 인터페이스는 자료형을 정의할 때만 사용하라

인터페이스를 구현하는 클래스를 만들게 되면, 그 인터페이스는 해당 클래스의 객체를 참조할 수 있는 자료형 역할을 하게 된다

인터페이스의 주 목적은, 해당 클래스의 객체로 어떤 일을 할 수 있는지 클라이언트에게 알리는 행위!

다른 목적으로는 적절하지 못하다

인터페이스를 잘못 사용한 예

  • 상수 인터페이스 (constant interface)

    public interface PhysicalConstants {
        static final double AVOGADROS_NUMBER = 6.02214199e23;
        static final double BOLTZMANN_CONSTANT = 1.3806503e-23;
        static final double ELECTRON_MASS = 9.10938188e-31;
    }
    

    인터페이스 안에 메서드가 없고 static final만 존재. 상수 이름앞에 클래스 이름을 붙이는 번거로움을 피하기 위해 사용하지만, 잘몬된 예! 클래스가 어떤 상수를 사용하느냐는 구현 세부사항임! (ex. StreamConstants)

  • 상수 유틸리티는 아래와 같이 작성되어야 함

    public class PhysicalConstants {
        private PhysicalConstants(){} // 객체 생성을 막음
    
        public static final double AVOGADROS_NUMBER = 6.02214199e23;
        public static final double BOLTZMANN_CONSTANT = 1.3806503e-23;
        public static final double ELECTRON_MASS = 9.10938188e-31;
    }
    

    사용 시 보통 PhysicalConstant.AVOGADRO_NUMBER과 같이 클래스명을 붙여야 하지만, JDK 1.5부터 도임된 static import를 사용하면 클래스 명 제거 가능함

  • static import 적용 시

    import static com.yhkim.test.PhysicalConstants.*;
    
    public class Test {
       double atoms(double mols) {
          return AVOGADROS_NUMBER * mols;
       }
       // PhysicalConstants를 사용할 일이 많다면 정적 임포트가 적절하다.
    }
    

results matching ""

    No results matching ""