티스토리 뷰
클래스가 어떤 인터페이스를 구현한다 → 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에 얘기해준다.
인터페이스는 오직 이 용도로만 사용해야 한다.
안티패턴
이 사용 용도에 맞지 않는 잘못된 예로 상수 인터페이스라는 것이 있다.
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.java
@Native public static final int MIN_VALUE = 0x80000000;
@Native public static final int MAX_VALUE = 0x7fffffff;
상수 인터페이스 해결책
열거타입으로 나타내기 적합한 상수라면 열거타입으로 (Item34)
인스턴스화 할 수 없는 유틸리티 클래스로 (Item4) 에 담아 공개하자.
// 22-2. 상수 유틸리티 클래스
public class PhysicalConstants {
private PhysicalConstants() { }
public static final double AVOGADROS_NUMBER = 6.022_140_857e23;
public static final double BOLTZMANN_CONSTANT = 1.380_648_52e-23;
public static final double ELECTRON_MASS = 9.109_383_56e-31;
}
// static import 사용시 클래스 이름 생략 가능
import static me.kingsubin.studyrepo.book.effectiveJava.PhysicalConstants.BOLTZMANN_CONSTANT;
public class Item22 {
double test() {
return BOLTZMANN_CONSTANT;
}
}
결론
- 인터페이스는 타입을 정의하는 용도로만 사용해야 한다.
- 상수 공개용 수단으로 사용하지 말자.
'책 > 이펙티브자바' 카테고리의 다른 글
아이템25. 톱레벨 클래스는 한 파일에 하나만 담으라 (0) | 2021.08.24 |
---|---|
아이템23. 태그 달린 클래스보다는 클래스 계층구조를 활용하라 (0) | 2021.08.24 |
아이템21. 인터페이스는 구현하는 쪽을 생각해 설계하라 (0) | 2021.08.24 |
아이템20. 추상 클래스보다는 인터페이스를 우선하라 (0) | 2021.08.18 |
아이템19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 (0) | 2021.08.17 |
링크
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- JPA 연관관계 매핑
- 김영한 JPA
- 드림코딩
- JS 딥다이브
- 김영한 http
- js array
- 이펙티브자바 아이템60
- java
- 킹수빈닷컴
- BOJ
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- ㅇㄷㅇㅈ
- dreamcoding
- HTTP 완벽 가이드
- 프로그래머스
- 백기선 스터디
- js promise
- 모던자바스크립트
- 백준
- 프로그래머스 SQL
- Spring Security
- 이펙티브자바 아이템59
- HTTP 완벽가이드
- 이펙티브자바 스터디
- REST API
- GCP
- http
- 패스트캠퍼스 컴퓨터공학 완주반
- js api
- 이펙티브자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
글 보관함