[Effective Java 3/e] 아이템 25 - 톱레벨 클래스는 한 파일에 하나만 담으라
아이템 25 - 톱레벨 클래스는 한 파일에 하나만 담으라
한 파일에 여러 클래스 정의 시 문제
public class Main {
public static void main(String[] args) {
System.out.println(Utensil.NAME + Dessert.NAME);
}
}
두 클래스가 한 파일(Utensil.java)에 정의되었다 - 따라 하지 말 것
class Utensil {
static final String NAME = "pan";
}
class Dessert {
static final String NAME = "cake";
}
두 클래스가 한 파일(Dessert.java)에 정의되었다 - 따라 하지 말 것
class Utensil {
static final String NAME = "pot";
}
class Dessert {
static final String NAME = "pie";
}
- 한 클래스를 여러 가지로 정의할 수 있으며, 그중 어느 것을 사용할지는 어느 소스 파일을 먼저 컴파일하냐에 따라 달라지기 때문
- javac Main.java Dessert.java -> 컴파일 오류
- javac Main.java -> pancake 출력
- javac Main.java Utensil.java -> pancake 출력
- javac Dessert.java Main.java -> potpie 출력
해결책
- 서로 다른 소스 파일로 분리
- 정적 멤버 클래스 사용
톱레벨 클래스들을 정적 멤버 클래스로 바꿔본 모습
```java public class Test { public static void main(String[] args) { System.out.println(Utensil.NAME + Dessert.NAME); }
private class Utensil { static final String NAME = “pot”; }
private class Dessert { static final String NAME = “pie”; } }