상수는 인터페이스에 정의되지 않아야 합니다.

 

Effective Java의 저자 Joshua Bloch에 따르면

상수 인터페이스 패턴은 잘못된 인터페이스 사용법입니다.
클래스가 내부적으로 상수를 사용하는 것은 구현 상세 사항입니다.
상수 인터페이스를 구현하는것은 세부 구현 정보가 클래스의 API로 노출됩니다. 클래스가 상수 인터페이스를 구현하는 것은 사용자에게는 영향이 없습니다. 사실 그것은 그들을 혼란스럽게 할 수 있습니다. 더 나쁜점으로는, 그것이 약속처럼 표현될 수 있습니다. 이후 릴리즈에서 해당 클래스는 더 이상 상수를 사용할 필요가 없도록 수정되더라도, 이진 호환성을 보장하기 위해 여전히 해당 인터페이스를 구현해야 합니다. 최종적으로 클래스가 상수 인터페이스를 구현하는 경우 모든 하위 클래스는 인터페이스 상수로 인해 오염된 네임스페이스를 가지게 됩니다.

해당 규칙은 인터페이스가 다른 구성 요소 없이 필드로만 구성 된 경우에 문제를 제기합니다.

규칙을 어긴 코드

interface Status { // 규칙을 어긴 코드
    int OPEN = 1;
    int CLOSED = 2;
}

규칙을 준수한 해결책

public enum Status { // 규칙을 준수한 해결책
    OPEN,
    CLOSED;
}

또는

public final class Status { // 규칙을 준수한 해결책
    public static final int OPEN = 1;
    public static final int CLOSED = 2;
}

If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project