본문은 Effective Java를 읽고 간단하게 정리한 글입니다. 필요에 따라 생략/수정된 부분이 있을 수 있으며, 내용이 추후 변경될 수 있습니다.
선결론
- 인터페이스는 타입을 정의하는 용도로만 사용한다
- 따라서 상수를 공개하는 수단으로 인터페이스를 사용하면 안 된다
인터페이스의 목적
- 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할
- 즉, 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에 얘기해주는 용도
상수 인터페이스
- 상수 인터페이스란 메서드 없이, 상수를 뜻하는 static final 필드로만 가득 찬 인터페이스
- 상수 인터페이스 안티패턴은 인터페이스를 잘못 사용한 예다
- 클래스 내부에서 사용하는 상수는 외부 인터페이스가 아니라 내부 구현에 해당하므로 상수 인터페이스를 구현하는 것은 내부 구현을 클래스의 API로 노출하는 행위이다
상수 인터페이스의 대안
- 특정 클래스나 인터페이스와 강하게 연관된 상수라면 해당 클래스나 인터페이스 자체에 추가
- Integer와 Double의 MIN_VALUE와 MAX_VALUE 상수
- 열거 타입으로 나타내기 적합한 상수라면 열거 타입으로 만들어 공개한다
- 위에 두 사항에 해당하지 않는다면 인스턴스화 시킬 수 없는 유틸리티 클래스(아이템 4)에 담아 공개한다
- 유틸리티 클래스에서 정의한 상수를 클라이언트에서 사용하려면 클래스 이름까지 함께 명시
- 유틸리티 클래스의 상수를 빈번히 사용한다면 정적 임포트(static import)하여 클래스 이름은 생략할 수 있다
'책 > Effective Java' 카테고리의 다른 글
[이펙티브 자바] 아이템 24: 멤버 클래스는 되도록 static으로 만들라 (0) | 2022.05.11 |
---|---|
[이펙티브 자바] 아이템 23: 태그 달린 클래스보다는 클래스 계층구조를 활용하라 (0) | 2022.05.11 |
[이펙티브 자바] 아이템 21: 인터페이스는 구현하는 쪽을 생각해 설계하라 (0) | 2022.05.09 |
[이펙티브 자바] 아이템 20: 추상 클래스보다는 인터페이스를 우선하라 (0) | 2022.05.09 |
[이펙티브 자바] 아이템 19: 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 (0) | 2022.05.05 |