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 패턴이다.
이러한 구조는 다음과 같은 문제점이 있다.
위와 같은 문제들 때문에 Constant Interface는 안티 패턴이므로 사용을 지양하는 것이 좋겠다. 애초에 Constant Interface를 사용해야 한다는 것 자체가 데이터의 응집도가 낮다는 것을 의미하므로, 설계부터 다시하는것이 좋겠다.
그러나 놀랍게도, ObjectStreamConstants 라는 인터페이스와 이를 구현해서 사용하는 ObjectInputStream 과 ObjectOutputStream 이라는 클래스가 자바 플랫폼 라이브러리에 존재한다. (착한 개발자는 따라하지 말도록 하자.)