✨ 상수 인터페이스를 사용하지 말자
인터페이스는, 구현체 인스턴스를 참조할 수 있는 타입 역할을 한다. 오직 이 용도로만 사용해야 한다!
이 지침에 맞지 않는 안티패턴은 '상수 인터페이스'이다. 상수 인터페이스는 내부 구현에 static final 필드로만 가득 찬 인터페이스다. 자바 플랫폼에도 java.io.ObjectSteamConstants 등 상수 인터페이스가 몇 개 있지만, 따라해서는 안된다. 잘못 활용한 것이므로..
구현체가 이런 상수 인터페이스를 implements 하면 이 상수들에 종속된다. 만약 다음 릴리즈에서 상수들을 사용 안 할 거여도, 호환성을 위해 여전히 상수 인터페이스를 구현하고 있어야 한다는 문제가 생긴다. final이 아닌 클래스가 상수 인터페이스를 구현한다면, 모든 하위 클래스의 namespace가 그 상수들로 오염되어버린다.
✨ 상수를 공개하려면 어떻게 해야 좋나요?
1) 어떤 클래스 or 인터페이스와 강하게 연관된 상수라면, 거기 자체에 추가하면 된다.
Integer, Double 등의 MIN_VALUE, MAX_VALUE 상수가 그런 예이다.
2) enum 타입으로 만들어 공개해도 좋다.
3) 인스턴스화 불가능한 유틸리티 클래스에 담아 공개해도 된다.
앞서 보여준 자바의 인터페이스 상수 예시 PhysicalConstants를 유틸리티 클래스로 제공한다면 아래와 같다.
반응형
'JAVA > Effective Java' 카테고리의 다른 글
상시 업데이트함 -- Effective java 스터디 (1) | 2024.04.16 |
---|---|
[이펙티브 자바] 추상 클래스보다는 인터페이스를 우선하라 ─ 4장:클래스와 인터페이스:Item20 (0) | 2023.12.10 |
[이펙티브 자바] 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 ─ 4장:클래스와 인터페이스:Item19 (1) | 2023.10.31 |
[이펙티브 자바] 상속보다는 컴포지션을 사용하라 ─ 4장:클래스와 인터페이스:Item18 (1) | 2023.10.30 |
[이펙티브 자바] 변경 가능성을 최소화하라 ─ 4장:클래스와 인터페이스:Item17 (0) | 2023.10.25 |