[Java] Constant interface

3221 단어 Javaanti patternJava

Constant interface란?

OOP의 안티 패턴중 하나이다.

Constant interface 위키피디아 문서

설명에 앞서 간단한 예시를 보고 가자.

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_NUMBERAVOGADROS_NUMBER로 줄여 쓰기 위해서 인터페이스를 상속한다! 이게 바로 Constant interface 패턴이다.

이러한 구조는 다음과 같은 문제점이 있다.

  • 사용하지 않는 상수도 포함할 수 있다.
  • 상수의 네임스페이스가 없으므로, IDE 없이는 해당 상수의 출처를 쉽게 알아낼 수 없다.
  • 상속을 통해 구현했으므로, 하위 클래스들 또한 필요하지 않더라도 해당 상수 클래스를 상속 받게 된다.
  • "이진 호환성"이 필요한 경우에는 영구히 인터페이스를 유지해야 한다.
  • 애초에 interface와 상속의 목적과 맞지 않는다.

위와 같은 문제들 때문에 Constant Interface는 안티 패턴이므로 사용을 지양하는 것이 좋겠다. 애초에 Constant Interface를 사용해야 한다는 것 자체가 데이터의 응집도가 낮다는 것을 의미하므로, 설계부터 다시하는것이 좋겠다.

그러나 놀랍게도, ObjectStreamConstants 라는 인터페이스와 이를 구현해서 사용하는 ObjectInputStreamObjectOutputStream 이라는 클래스가 자바 플랫폼 라이브러리에 존재한다. (착한 개발자는 따라하지 말도록 하자.)

좋은 웹페이지 즐겨찾기