-
아이템 25. 톱레벨 클래스는 한 파일에 하나만 담으라Study/Effective Java 2023. 8. 10. 14:20
소스 파일 하나에 톱레벨 클래스를 여러 개 선언하더라도 자바 컴파일러는 불평하지 않는다. 하지만 아무런 득이 없을 뿐더러 심각한 위험을 감수해야하는 행위다.
// 코드 25-1 두 클래스가 한 파일(Utensil.java)에 정의되었다. - 따라 하지 말 것! (150쪽) class Utensil { static final String NAME = "pan"; } class Dessert { static final String NAME = "cake"; }
같은 클래스를 가진
Utensil.java
,Dessert.java
가 있다고 하자.public class Main { public static void main(String[] args) { System.out.println(Utensil.NAME + Dessert.NAME); } }
javac Main.java Dessert.java
javac Main.java
javac Main.java Utensil.java
javac Dessert.java Main.java컴파일러에 어느 소스 파일을 먼저 건네느냐에 따라 동작이 달라지므로 반드시 잡아야 할 문제다.
단순히 톱레벨 클래스들을 서로 다른 소스 파일로 분리하면 그만이다. 굳이 여러 톱레벨 클래스를 한 파일에 담고 싶다면 정적 멤버 클래스(아이템 24)를 사용하자.
// 코드 25-3 톱레벨 클래스들을 정적 멤버 클래스로 바꿔본 모습 (151-152쪽) 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"; } }
'Study > Effective Java' 카테고리의 다른 글
아이템 27. 비검사 경고를 제거하라 (0) 2023.08.25 아이템 26. 로 타입은 사용하지 말라. (0) 2023.08.17 아이템 24. 멤버 클래스는 되도록 static으로 만들라 (0) 2023.08.10 아이템 23. 태그 달린 클래스보다는 클래스 계층구조를 활용하라 (0) 2023.08.10 아이템 22. 인터페이스는 타입을 정의하는 용도로만 사용하라 (0) 2023.08.10