-
[Effective Java] 아이템22: 인터페이스는 타입을 정의하는 용도로만 사용하라Language/Java 2022. 7. 16. 01:10
인터페이스는 자신을 구현할 클래스의 인스턴스를 참조할 수 있는
타입
역할을 한다.
인터페이스는 오직 이 용도로만 사용해야 한다.✔️ 상수 인터페이스 - 잘못된 사용 예시
인터페이스를 타입을 정의하는 용도로 사용하지 않은 대표적인 예로 상수 인터페이스를 들 수 있다.
상수 인터페이스
란, 메서드 없이 상수를 뜻하는 static final 필드로만 가득 찬 인터페이스를 말한다.📍 상수 인터페이스 안티패턴
// 상수 인터페이스 안티패턴 - 사용금지! public interface PhysicalConstants { // 아보가드로 수 (1/몰) static final double AVOGADROS_NUMBER = 6.022_140_857e23; // 볼츠만 상수 (J/K) static final double BOLTZMANN_CONSTANT = 1.380_648_52e-23; // 전자 질량 (kg) static final double ELECTRON_MASS = 9.109_383_56e-31; }
- 위와 같은 상수 인터페이스 안티패턴은 인터페이스를 잘못 사용한 예다.
- 상수 인터페이스를 구현하는 것은 이 내부 구현을 클래스의 API로 노출하는 행위다.
- 상수를 공개할 목적이라면, 이 외에 적당한 선택지 2가지가 있다.
- 열거 타입으로 나태내기 적합한 상수라면,
열거 타입
으로 만들어 공개한다. - 인스턴스화할 수 없는
유틸리티 클래스
에 담아 공개한다.
- 열거 타입으로 나태내기 적합한 상수라면,
📍 상수 유틸리티 클래스
// 상수 유틸리티 클래스 public class PhysicalConstants { private PhysicalConstants() { } // 인스턴스화 방지 // 아보가드로 수 (1/몰) public static final double AVOGADROS_NUMBER = 6.022_140_857e23; // 볼츠만 상수 (J/K) public static final double BOLTZMANN_CONST = 1.380_648_52e-23; // 전자 질량 (kg) public static final double ELECTRON_MASS = 9.109_383_56e-31; }
핵심 정리
인터페이스는 타입을 정의하는 용도로만 사용해야 한다.
상수 공개용 수단으로 사용하지 말자.
728x90'Language > Java' 카테고리의 다른 글
[Effective Java] 아이템24: 멤버 클래스는 되도록 static으로 만들라 (0) 2022.07.22 [Effective Java] 아이템23: 태그 달린 클래스보다는 클래스 계층구조를 활용하라 (0) 2022.07.18 [Effective Java] 아이템21: 인터페이스는 구현하는 쪽을 생각해 설계하라 (0) 2022.07.14 [Effective Java] 아이템20: 추상 클래스보다는 인터페이스를 우선하라 (0) 2022.07.09 [Effective Java] 아이템19: 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 (0) 2022.07.09