[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”; } }