독서찰기(讀書札記)/이펙티브 자바
[아이템 25] 톱레벨 클래스는 한 파일에 하나만 담으라
NoodleMan
2022. 2. 5. 16:32
[Why]
class Utensil {
static final String NAME = "pan";
}
class Dessert {
static final String NAME = "cake";
}
// 두 클래스가 한 파일(Utensil.java)에 정의되었다.
public class Main {
public static void main(String[] args) {
System.out.println(Utensil.NAME + Dessert.NAME);
}
}
- Main을 실행하면 pancake를 출력한다.
class Utensil {
static final String NAME = "pot";
}
class Dessert {
static final String NAME = "pie";
}
// 두 클래스가 한 파일(Dessert.java)에 정의되었다.
- javac Main.java / javac Main.java Utensil.java 명령: Dessert.java 파일을 작성하기 전처럼 pancake를 출력
- javac Dessert.java Main.java 명령: potpie 출력
- javac Main.java Dessert.java 명령: 컴파일 오류(Utensil, Dessert 클래스 중복 정의)
어느 소스 파일을 먼저 컴파일하냐에 따라 어느 것을 사용할 지가 달라진다.
[How]
- 톱레벨 클래스들(Utensil과 Dessert)을 서로 다른 소스 파일로 분리하면 된다.
- 굳이 한 파일에 담고 싶으면 정적 멤버 클래스(아이템24)를 사용하는 방법을 고민해볼 수 있다.
public class Test {
public static void main(String[] args) {
System.out.println(Utensil.NAME + Dessert.NAME);
}
private static class Utensil {
static fianl String NAME = "pan";
}
private static class Dessert {
static final String NAME = "cake";
}
}