[Java] Constant interface

sania Ka·2021년 11월 26일
0
post-custom-banner

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 이라는 클래스가 자바 플랫폼 라이브러리에 존재한다. (착한 개발자는 따라하지 말도록 하자.)

post-custom-banner

0개의 댓글