Item25 - 톱레벨 클래스는 한 파일에 하나만 담으라
2023. 12. 3. 20:11ㆍBook/이펙티브 자바
소스 파일 하나에 톱레벨 클래스를 여러 개 선언하더라도 자바 컴파일러는 잘 작동한다.
하지만 이점도 없을 뿐더러 위험해질 수 있다. 이렇게 하면 한 클래스를 여러 가지로 정의할 수 있으며, 그중 어느 것을 사용할지는 어느 소스 파일을 먼저 컴파일하냐에 따라 달라지기 때문이다.
public class Main {
public static void main(String[] args) {
System.out.println(Utensil.NAME + Dessert.NAME);
}
}
Utensil과 Dessert 클래스가 Utensil.java 라는 한 파일에 정의 되어 있다고 해보자
class Utensil {
static final String NAME = "pan";
}
class Dessert {
static final String NAME = "cake";
}
main을 호출시 pancake가 잘 출력된다. 하지만 Dessert.java 파일을 똑같은 내용으로 만들어보자
// 코드 25-2 두 클래스가 한 파일(Dessert.java)에 정의되었다. - 따라 하지 말 것! (151쪽)
class Utensil {
static final String NAME = "pot";
}
class Dessert {
static final String NAME = "pie";
}
컴파일러가 두 소스 파일을 함께 컴파일 하면 duplicate 되었다고 컴파일 에러가 날 것이다.
Utensil 클래스와 main 을 컴파일 한다면 pancake, Dessert와 main을 컴파일 한다면 potpie 를 출력할 것이다. 이처럼 순서에 따라 결과값이 달라질 수 있다.
그러니 톱레벨 클래스는 분리하자
'Book > 이펙티브 자바' 카테고리의 다른 글
Item27 - 비검사 경고를 제거하라 (2) | 2023.12.05 |
---|---|
Item26 - 로 타입은 사용하지 말라 (0) | 2023.12.04 |
Item24 - 멤버 클래스는 되도록 static으로 만들라 (1) | 2023.12.03 |
Item23 - 태그 달린 클래스보다는 클래스 계층 구조를 활용하라 (0) | 2023.12.03 |
Item21, 22 - 인터페이스 구현 및 주의 (0) | 2023.12.03 |