[Java] Constant interface
Constant interface란?
OOP의 안티 패턴중 하나이다.
설명에 앞서 간단한 예시를 보고 가자.
interface PhysicalConstants {
double AVOGADROS_NUMBER = 6.02214199e23;
double BOLTZMANN_CONSTANT = 1.3806503e-23;
...
}
class PhysicsCalculator implements PhysicalConstants {
...
{
...
double value = AVOGADROS_NUMBER * x;
...
}
}
interface에 선언한 필드는 자동으로 public static final이 된다. 이것을 이용하여, interface에 사용하고자 하는 상수들을 선언한다. 그리고는 단순히 PhysicalConstants.AVOGADROS_NUMBER
를 AVOGADROS_NUMBER
로 줄여 쓰기 위해서 인터페이스를 상속한다! 이게 바로 Constant interface 패턴이다.
이러한 구조는 다음과 같은 문제점이 있다.
- 사용하지 않는 상수도 포함할 수 있다.
- 상수의 네임스페이스가 없으므로, IDE 없이는 해당 상수의 출처를 쉽게 알아낼 수 없다.
- 상속을 통해 구현했으므로, 하위 클래스들 또한 필요하지 않더라도 해당 상수 클래스를 상속 받게 된다.
- "이진 호환성"이 필요한 경우에는 영구히 인터페이스를 유지해야 한다.
- 애초에 interface와 상속의 목적과 맞지 않는다.
위와 같은 문제들 때문에 Constant Interface는 안티 패턴이므로 사용을 지양하는 것이 좋겠다. 애초에 Constant Interface를 사용해야 한다는 것 자체가 데이터의 응집도가 낮다는 것을 의미하므로, 설계부터 다시하는것이 좋겠다.
그러나 놀랍게도, ObjectStreamConstants 라는 인터페이스와 이를 구현해서 사용하는 ObjectInputStream 과 ObjectOutputStream 이라는 클래스가 자바 플랫폼 라이브러리에 존재한다. (착한 개발자는 따라하지 말도록 하자.)
Author And Source
이 문제에 관하여([Java] Constant interface), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kasania/Java-Constant-interface저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)