Item25. 톱레벨 클래스는 한 파일에 하나만 담으라!
톱레벨 클래스
중첩이 아닌 단일 형태의 클래스
- 자바 컴파일러는 한 파일에 톱레벨 클래스가 여러 개 선언되어도 불평하지 않는다.
- 하지만 이러한 방법은 득이 없고, 위험을 감수해야 하는 실만 있다.
1
2
3
4
5
6
7
8
// A.java
class A {
static final String NAME = "hello";
}
class B {
static final String NAME = "world!";
}
1
2
3
4
5
6
7
8
// B.java
class A {
static final String NAME = "younghwan";
}
class B {
static final String NAME = "kim";
}
- 두 개의 톱레벨 클래스를 만들고, 실행한다.
- 이렇게 되면 어떤 패키지의 클래스가 먼저 실행되느냐에 따라 다른 결과를 출력하게 된다. 이는 반드시 바로 잡아야하는 문제다.
해결 방안
- 아주 간단하다. 단순히 톱레벨 클래스들을 서로 다른 소스 파일로 분리하면 된다.
- 굳이 여러 톱레벨 클래스를 한 파일에 담아 사용하고 싶다면 정적 멤버 클래스를 사용하는 방법을 사용할 수 있다.
- 다른 클래스에 딸린 부가적 클래스인 경우, 정적 멤버 클래스로 만드는 편이 더 나을 것.
핵심 정리
- 소스 파일 하나에는 반드시 톱레벨 클래스(혹은 톱레벨 인터페이스)를 하나만 담자.
- 그러면 앞서 컴파일러가 한 클래스에 대한 정의를 여러 번 내려 생긴 문제는 사라진다.
- 소스 파일을 어떤 순서로 컴파일하든 바이너리 파일이나 프로그램의 동작이 달라지는 일은 결코 일어나지 않을 것이다.
Comments powered by Disqus.