2023-java-study / book-study

북 스터디 기록 레포지토리
0 stars 0 forks source link

[item 22] 하위 클래스의 이름공간이 그 인터페이스가 정의한 상수로 오염되는 것 #72

Closed ssstopeun closed 1 year ago

ssstopeun commented 1 year ago

p. 140 에

final이 아닌 클래스가 상수 인터페이스를 구현하다면 모든 하위 클래스의 이름공간이 그 인터페이스가 정의한 상수들로 오염되어 버린다.

는 부분의 의미가 public class PysicalTest implements PhysicalConstants 와 같이 implements 뒷 부분이 인터페이스의 이름으로 오염된다는 뜻일까요? 책의 내용은 인터페이스가 정의한 상수들로 오염된다고 하는 부분을 어떻게 이해하셨나요...?

gmelon commented 1 year ago

저는 하위 클래스의 네임스페이스가 인터페이스에서 정의한 상수의 영향을 받는다 라고 이해했습니다.

예를 들면 아래와 같이 상수를 선언한 인터페이스 InterfaceConstants 와 이를 구현한 MyClass 가 있을 때,

InterfaceConstants

public interface InterfaceConstants {

    String NAME = "현상혁";
    int AGE = 26;

}

MyClass

public class MyClass implements InterfaceConstants {
    public void someMethod() {

    }
}

아래와 같이 MyClass 엔 아무런 변수/상수를 선언하지 않았음에도 인터페이스에서 선언한 상수를 사용할 수 있게 됩니다. 또한 MyClass가 final이 아니므로, 이 클래스를 상속받는 다른 클래스에도 이런 식으로 사용이 가능할 것입니다. 저는 이러한 상황이 이름공간(네임스페이스)가 '오염' 되는 상황이라고 이해했습니다.

image

아마 책에서는 이런 식으로 상위 인터페이스에서 선언한 상수가 계속해서 하위 클래스에서 접근 가능한 상황이 불필요하고 오류 가능성을 주기때문에 해당 설명을 넣은게 아닐까 생각됩니다.

참고 자료

네임스페이스란