하나의 소스 파일에 톱레벨 클래스를 여러 개 선언하더라도, 자바 컴파일러는 정상 동작을 한다.
그렇지만 위와 같이 정의하는 것이 왜 위험한지 컴파일 하는 과정을 통해 알아보자.
[문제점]
// Main.java에 정의 된 클래스 (Utensil, Dessert 참조)
public class Main {
public static void main(String[] args) {
System.out.println(Utensil.NAME + Dessert.NAME);
}
}
// A.java에 함께 정의된 클래스
class Utensil {
static final String NAME = "pan";
}
class Dessert {
static final String NAME = "cake";
}
// B.java에 함께 정의된 클래스
class Utensil {
static final String NAME = "pot";
}
class Dessert {
static final String NAME = "pie";
}
이 때 각 .java
소스 파일을 컴파일 하는 순서에 따라 동작 결과가 달라진다.