public class Main {
public static void main(String[] args) {
System.out.println(Utensil.NAME + Dessert.NAME);
}
}
Utensil
와 Dessert
가 한 파일에 아래와 같이 각각 정의됐다면?// Utensil
class Utensil {
static final String NAME = "pan";
}
class Dessert {
static final String NAME = "cake";
}
// Dessert
class Utensil {
static final String NAME = "pot";
}
class Dessert {
static final String NAME = "pie";
}
만약 여기서 javac Main.java Dessert.java
로 컴파일 하면 컴파일 오류가 나서 클래스를 중복 정의했다고 나올 것임
하지만 javac Main.java
혹은 javac Main.java Utensil.java
로 컴파일시 오류가 나지않고 작동함, 즉 소스 파일을 먼저 건네느냐에 따라 동작이 달라짐
가장 간단한 방법은 톱레벨 클래스들을 서로 다른 소스 파일로 분리하면 그만임
굳이 담고 싶다면 정적 멤버 클래스를 사용하는 방법을 고민해볼 수 있음
다른 클래스에 딸린 부차적인 클래스라면 정적 멤버 클래스로 만드는 쪽이 일반적으로 더 나을 것이고 읽기 좋고 private
선언하면 접근 범위도 최소로 관리할 수 있음
// 정적 멤버 클래스 적용
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";
}
}