티스토리 뷰
(Effective Java) 규칙22. 인터페이스는 타입을 정의하는 용도로만 사용하라
인터페이스의 목적
-
인터페이스를 구현하는 클래스를 만들게 되면, 그 인터페이스는 해당 클래스의 객체를 참조할 수 있는 자료형(type) 역할을 하게 된다.
- 해당 클래스의 객체로 어떤 일을 할 수 있는지 클라이언트에게 알리는 행위임
-
인터페이스의 목적은 여기까지이며 다른 목적으로 인터페이스를 정의 하고 사용하는 것은 적절치 못함
인터페이스를 잘못 사용하는 예
상수 인터페이스(constant interface)
-
형태
- 메서드가 없고,
static final
필드만 있는 형태로 모든 필드는 상수 정의임 - 대체로 상수 이름 앞에 클래스 이름을 붙이는 번거로움을 피하기 위해서임
//상수 인터페이스 안티패턴 - 사용하지 말 것! public interface PhysicalConstants { //아보가드로 수(1/mol) static final double AVOGADRO_NUMBER = 6.02214199e23; //볼쯔만 상수(J/K) static final double BOLZMANN_CONSTANT = 1.3806503e-23; //전자 질량(kg) static final double ELECTRON_MASS = 9.10938188E-31; }
- 메서드가 없고,
-
문제점
- 상수 정의를 인터페이스에 포함시키면 구현 세부사항이 클래스의 공개 API에 스며들게 되고 혼동을 줄 우려가 있음
- 자바 플랫폼 라이브러리에도 상수 인터페이스가 몇개 있는데
java.io.Object.StreamConstants
실수로 포함된 것으로 생각해야 하고 따라해서는 절대 안됨
-
다른 대안
- 해당 상수가 이미 존재하는 클래스나 인터페이스에 강하게 연결되어 있을 때는 그 상수들을 해당 클래스나 인터페이스에 추가 하는 것
- 예) 기본 자료형의 객체 표현형들(Integer, Double)의
MIN_VALUE
,MAX_VALUE
상수
- 예) 기본 자료형의 객체 표현형들(Integer, Double)의
- 이런 상수들이
enum
자료형의 멤버가 되어야 바람직할 때는enum
자료형(규칙 30)과 함께 공개되어야 함- 그렇지 않을 때는 해당 상수들을 객체 생성이 불가능한 유틸리티 클래스에 넣어서 공개해야 함
- 앞선 형태를 바꾼 모습
//상수 유틸리티 클래스 package com.effective.java.science; public class PhysicalConstants { private PhysicalConstants() { } //객체 생성을 막음 public static final double AVOGADRO_NUMBER = 6.02214199e23; public static final double BOLZMANN_CONSTANT = 1.3806503e-23; public static final double ELECTRON_MASS = 9.10938188E-31; }
- 해당 상수가 이미 존재하는 클래스나 인터페이스에 강하게 연결되어 있을 때는 그 상수들을 해당 클래스나 인터페이스에 추가 하는 것
결론
-
인터페이스는 자료형을 정의할 때만 사용해야 한다.
-
특정 상수를 API의 일부로 공개할 목적으로는 적절치 않다.
끝으로
이 글이 도움이 되었다면, Google 광고 한번씩 클릭 부탁 드립니다. 🙏🙏🙏
광고 클릭은 많은 힘이 됩니다!
반응형
'프로그래밍 > EffectiveJava' 카테고리의 다른 글
(이펙티브 자바) 규칙12. toString을 항상 재정의하라 (0) | 2020.02.25 |
---|---|
(이펙티브 자바) 규칙7. 다 쓴 객체 참조를 해제하라 (0) | 2020.02.24 |
(이펙티브 자바) 규칙20. 추상 클래스 보다는 인터페이스를 우선하라 (0) | 2020.02.18 |
(이펙티브 자바) 규칙18. 상속보다는 컴포지션을 사용하라 (0) | 2020.02.13 |
(이펙티브 자바) 규칙 1. 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2020.02.11 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 방통대 과제물
- JavaFX Window Close
- JavaFX 테이블뷰
- effective java
- JavaFX
- 텐트
- intelij
- 이펙티브
- JavaFX 종료
- 이펙티브 자바
- TableView
- effectivejava
- 일본 자전거 여행
- 스프링부트
- 배낭 여행
- 자전거 여행
- 인텔리제이
- springboot
- 이펙티브자바
- windows
- JavaFX Table View
- 일본 여행
- java
- 자바
- 자전거
- 일본 배낭여행
- Java UI
- git
- 배낭여행
- 일본여행
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함