이펙티브 자바
아이템 25. 톱레벨 클래스는 한 파일에 하나만 담으라
소스파일에 톱레벨 클래스를 여러게 만들어도 자바 컴파일러는 문제가 없다.
아래는 Utensil.java 클래스에 톱레벨 클래스를 두개 지정해도 정상적이다.
1 2 3 4 5 6 7 8 9 10 11 12
| package com.github.sejoung.codetest.toplevel;
class Utensil { static final String NAME = "pan"; }
class Dessert { static final String NAME = "cake"; }
|
1 2 3 4 5 6 7 8 9
| package com.github.sejoung.codetest.toplevel;
public class Main { public static void main(String[] args) { System.out.println(Utensil.NAME + Dessert.NAME); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| package com.github.sejoung.codetest.toplevel;
class Utensil { static final String NAME = "pot"; }
class Dessert { static final String NAME = "pie"; }
|
위처럼 톱레벨클래스를 2개를 하나에 파일에 작성하게 되면 원치 않는 결과를 나타낼수도 있다.
1 2 3
| javac Main.java Dessert.java
|
위 명령어를 실행하면 potpie가 나오고 아래 명령어를 실행하면 pancake이 나오게 된다.
1 2 3
| javac Main.java Utensil.java
|
해결책은 간단하나 하나의 파일에 하나의 클래스만 담으면 된다.
굳이 여러게의 클래스를 하나의 파일에 담고 싶으면 정적맴버 클래스를 사용하는 방법도 있다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| package com.github.sejoung.codetest.toplevel;
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"; } }
|
private으로 하면 접근 제한도 되고 여러모로 편할것이다.
참조