item 22) 인터페이스는 타입을 정의하는 용도로만 사용하라
인터페이스의 용도
자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입의 역할
자신의 인스턴스로 무엇을 할 수 있는지 클라이언트에 알려주는 것
상수 공개용 수단으로 사용하지 말 것. 즉, 상수 인터페이스는 사용하지 말자!
상수 인터페이스
메서드 없이 static final 필드만 존재하는 인터페이스
정규화된 이름(qualified name) 사용하는 것을 피하기 위해 사용
상수 인터페이스 구현 시, 클래스 내부에서 사용하는 상수는 내부 구현이므로 이를 클래스의 API로 노출된다.
클래스가 어떤 상수 인터페이스를 사용하든 사용자에게는 의미가 없고, 오히려 혼란을 주기도 하며, 상수들에 종속되는 클라이언트 코드를 작성할 수도 있다.
클라이언트 코드에서 더이상 상수들을 사용하지 않아도 바이너리 호환성을 위해 상수 인터페이스를 유지하고 있어야 한다.
상수를 공개하는 방법
특정 클래스나 인터페이스와 강하게 연관된 경우 클래스나 인터페이스 내부에 추가 ex) Integer, Double 의 MIN_VALUE, MAX_VALUE 상수
enum 타입 사용
인스턴스화할 수 없는 유틸리티 클래스 사용
고정/부동 소수점이 5자리 이상이라면 '_'를 사용해 리터럴 값에 영향을 주지 않으면서 가독성이 좋게 표현할 수 있다.
유틸리티 클래스의 상수를 사용할 때 클래스 이름까지 명시하거나, 정적 임포트를 통해 클래스 이름 생략 가능
Last updated