티스토리 뷰
반응형
톱레벨 클래스가 소스 파일 하나에 들어있으면 심각한 위험을 감수해야한다.
//A.java 파일
class A {
static final String NAME = "ab";
}
class B{
static final String NAME = "cd";
}
//B.java 파일
class A {
static final String NAME = "ef";
}
class B{
static final String NAME = "gh";
}
만약 다른곳에서 A 클래스와 B 클래스를 참조할때 중복 정의이기 때문에 이와 같이 작성하면 안된다.
컴파일러에 어느 소스 파일을 먼저 건네느냐에 따라 동작이 달라지므로 이렇게 사용하면 안된다.
해결방안은 단순히 톱레벨 클래스들을 서로 다른 소스파일로 분리하는 것이다.
굳이 한 파일에 담고 싶다면 정적 멤버 클래스를 사용해라.
public class Main {
private static class A {
}
private static class B {
}
}
결론
소스 파일 하나에는 반드시 하나의 톱레벨 클래스/인터페이스 를 담자.
이렇게 해야 소스파일을 어떤 순서로 컴파일하든간에 동작이 달라지는 일은 없을 것이다.
반응형
'Java > Effective Java' 카테고리의 다른 글
[Effective Java] 27.비검사 경고를 제거하라 (0) | 2022.03.18 |
---|---|
[Effective Java] 26.로 타입은 사용하지 말라 (0) | 2022.03.18 |
[Effective Java] 24.멤버 클래스는 되도록 static으로 만들라 (0) | 2022.03.17 |
[Effective Java] 23.태그 달린 클래스보다는 클래스 계층구조를 활용하라 (0) | 2022.03.17 |
[Effective Java] 22.인터페이스는 타입을 정의하는 용도로만 사용하라 (0) | 2022.03.17 |
댓글