땀두 블로그

[도서] Effective Java - Item 22. 인터페이스틑 타입을 정의하는 용도로만 사용하라 본문

도서

[도서] Effective Java - Item 22. 인터페이스틑 타입을 정의하는 용도로만 사용하라

땀두 2022. 5. 11. 16:01

이펙티브 자바 3판을 읽으면서 내용을 정리하는 포스트입니다. 혹시 틀린 부분이나 잘 못 설명한 부분이 있으면 댓글로 남겨주시면 수정하도록 하겠습니다.

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

인터페이스는 자신이 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다. 이 말은 자신의 인스턴스로 무엇을 할 수 있는지 말해주는 것 뿐만 해야한다는 것이다.

상수 인터페이스는 메소드 없이 static final 필드로만 차있는 인터페이스이다.

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로 노출하는 행위이기 때문이다. 또한 내부 구현이지만 클라이언트가 이 상수들에 종속되게 되어 이 상수들이 더는 쓰이지 않더라도 바이너리 호환성을 위해 이 상수 인터페이스를 구현하고 있어야 한다.

상수 인터페이스 대안
  • Integer나 Double에 있는 MIN_VALUE와 같이 그 클래스나 인터페이스 자체에 추가해야 한다.
  • 열거 타입으로 나타내기 적합한 상수라면 열거 타입으로 만들어 공개한다.
  • 인스턴스화할 수 없는 유틸리티 클래스에 담아 공개한다.
Comments