Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- kodility
- 코틀린
- android architecture component
- C++
- Android
- NDK
- Python
- Kotlin
- android push
- 안드로이드
- livedata
- RxJava
- 프로그래머스
- Android P
- Django REST framework
- dart
- Django REST Android
- Flutter TextField
- 알고리즘
- flutter firestore
- 안드로이드 구글맵
- C
- FLUTTER
- UWP
- Django REST
- C/C++
- mfc
- Java
- Rxjava2
- RxAndroid
Archives
- Today
- Total
개발하는 두더지
[Effective Java 규칙19] 인터페이스는 자료형을 정의할 때만 사용하라 본문
[Effective Java 규칙19] 인터페이스는 자료형을 정의할 때만 사용하라
Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다.
인터페이스를 구현해 클래스를 만든다는 건, 해당 클래스의 객체로 어떤 일을 할 수 있는지 클라이언트에게 알리는 것이다.
이진호환성이란 "클래스를 변경할 때, 그 클래스를 사용하는 클래스들에서 리컴파일 할 필요가 없어야된다" 라는 말이다.
상수 인터페이스 패턴은 인터페이스를 잘못 사용한 패턴이다.
public interface Constants {
static final double AVOGADROS_NUMBER = 6.02214199e23;
static final double BOLTZMANN_CONSTANT = 1.3806503e-23;
}
이진호환성(Binary Compatibility)를 보장하지 않고, 자바 플랫폼 라이브러리에서도 실수로 포함된 상수 인터페이스가 몇개 있다. 그중에 하나는 java.io.StreamConstants
상수를 API 일부로 공개하고 싶고, 이미 존재하는 클래스나 인터페이스에 강하게 연결되어 있다면 그 상수를 해당 클래스나 인터페이스에 추가해야 한다. enum 자료형(규칙30)으로 공개하거나 객체 생성 불가능한 유틸리티 클래스(규칙4)에 넣어서 공개해야 한다.
public class Constants {
private Constants() {} // 객체 생성 막음
static final double AVOGADROS_NUMBER = 6.02214199e23;
static final double BOLTZMANN_CONSTANT = 1.3806503e-23;
}
이렇게 사용하면 상수 앞에 클래스 이름을 붙이는데 정적 임포트(static import) 방식으로 클래스 이름을 제거할 수 있다.
요약하자면, 인터페이스는 자료형을 정의할 때만 사용해야 하고, 특정 상수를 API 일부로 공개할 목적으로는 적절할지 않다.
'Java,Android' 카테고리의 다른 글
[Effective Java 규칙21] 전략을 표현하고 싶을 때는 함수 객체를 사용하라 (0) | 2018.09.28 |
---|---|
[Effective Java 규칙20] 태그 기반 클래스 대신 클래스 상속을 활용하라 (0) | 2018.09.26 |
WorkManager로 안드로이드 하위 버전부터 오레오 버전까지 백그라운드 작업 통합 (1) | 2018.09.19 |
[Effective Java 규칙18] 추상 클래스 대신 인터페이스를 사용하라 (0) | 2018.09.17 |
[Effective Java 규칙17] 상속을 위한 설계와 문서가 없다면 상속하지 마라 (0) | 2018.09.17 |
Comments