소스파일 하나에 톱레벨 클래스를 여러개 선언하지 말자
→ 여러개 선언 시, 한 클래스를 여러 가지로 정의할 수 잇으며, 그중 어느 것을 사용할지는 어느 소스 파일을 먼저 컴파일하느냐에 따라 달라지기 때문
public class Main{
public static void main(String[] args){
System.out.println(Utensil.Name + Dessert.Name);
}
}
// Utensil.java
class Utensil {
String NAME = "pan";
}
class Dessert{
String NAME = "cake";
}
// Dessert.java
class Utensil{
String NAME = "pot";
}
class Dessert{
String NAME = "pie";
}
javac Main.java Dessert.java
컴파일
→ Main.java에서 먼저 사용되고 있는 Utensil.java를 먼저 살피게 되고, 이후 Dessert.java를 처리할 때 같은 클래스의 정의가 있음을 알게 됨
javac Main.java
나 javac Main.java Utensil.java
로 컴파일
→ Utensil에 정의된 클래스 사용 : pancake 출력
javac Dessert.java Main.java
로 컴파일
→ Dessert가 먼저 처리되어 Dessert에 정의된 클래스를 사용 : potpie 출력
→ 어떤 파일을 먼저 컴파일하는지에 따라 사용되는 클래스가 달라짐
소스파일 하나에는 반드시 하나의 톱레벨 클래스만 정의한다
굳이 여러 톱레벨 클래스를 한 파일에 담고 싶다면 정적 멤버 클래스를 사용하자
public class Test {
public static void main(String[] args) {
System.out.println(Utensil.NAME+Dessert.NAME);
}
private static class Utensil{
static final String NAME = "pan";
}
private static class Dessert{
static final String NAME = "cake";
}
}