티스토리 뷰
|
인터페이스를 구현하는 클래스를 만들게 되면, 그 인터페이스는 해당 클래스의 객체를 참조할 수 있는 자료형 역할을 하게 된다. 인터페이스를 클래스가 구현한다는 것은 클라이언트에게 클래스의 객체가 어떤일을 하게 될지 알려주는 것이다. 다른 목적으로 인터페이스를 정의하고 사용하는 것은 적절치 못하다.
이 기준에 미달하는 사례로는 상수 인터페이스 라는 것이 있다.
상수 인터페이스 : 메서드가 없고, static final 필드만 있는 인터페이스
상수 이름 앞에 클래스 이름을 붙이는 번거로움을 피하기 위해서 다음과 같은 인터페이스를 만든다.
//상수 인터페이스 안티 페턴!!!
public interface PhysicalConstants {
static final double AVOGADROS_NUBMER = 6.123123124;
static final double BOLTZMANN_CONSTANT = 1.123123123;
static final double ELECTRON_MASS = 9.123123123;
}
상수 인터페이스는 인터페이스를 잘못 사용한 예이다.
상수 정의를 인터페이스에 포함시키면 구현 세부사항이 클래스의 공개 API에 스며들게 된다.
//이렇게 스며 들게 된다.
public interface TestInterface {
static final double AVOGADORS_NUMBER = 1.123123123;
}
public class TestClass implements TestInterface {
}
TestClass tc = new TestClass();
double t = tc.AVOGADORS_NUMBER;
클래스가 상수 인터페이스를 구현한다는 사실은 클래스 사용자에게는 중요한 정보가 아니다.
상수 유틸리티 클래스를 만들어서 제공하는게 바람직하다.
public class PhysicalConstants {
private PhysicalConstants() { } //객체 생성을 막음
public static final double AVOGADROS_NUBMER = 6.123123124;
public static final double BOLTZMANN_CONSTANT = 1.123123123'
public static final double ELECTRON_MASS = 9.123123123;
}
인터페이스는 자료형을 정의할 때만 사용해야 한다. 특정 상수를 API의 일부로 공개할 목적으로는 적절치 않다.
'JAVA > Effective Java' 카테고리의 다른 글
규칙21 전략을 표현하고 싶을 때는 함수 객체를 사용하라 (0) | 2018.12.19 |
---|---|
규칙20 태그 달린 클래스 대신 클래스 계층을 활용해라 (0) | 2018.12.19 |
규칙18 추상 클래스 대신 인터페이스를 사용하라 (0) | 2018.12.19 |
규칙17 계승을 위한 설계와 문서를 갖추거나, 그럴 수 없다면 계승을 금지하라 (0) | 2018.12.19 |
규칙16 상속하는 대신 구상하라 (0) | 2018.12.19 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- aurora
- rate limit
- getBoolean
- custom config data convertion
- notify()
- Seperate Chaining
- msyql-connector-java
- notifyAll()
- reactor
- Flux
- MariaDB
- router
- Lazy
- RouteDefinition
- ConcurrentHashMap
- ResultSet
- DyanomoDB
- GlobalFilter
- circurit breaker
- spring cloud gateway
- referencedColumnName
- HashMap
- mariadb-connector-j
- mariada-connector
- dynamodb
- N+1
- wait()
- reative
- AbstractMethodError
- RoutePredication
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함