■ 하나의 java 파일에는 하나의 톱레밸 class를 생성하자
소스 파일 하나에 여러 톱레밸 클래스를 선언하더라도 자바 컴파일러는 불평하지 않는다. 하지만 이렇게 할 경우 심각한 위험을 감수해야한다.
- 패키지 트리구조로 파악되지 않는 클래스가 생긴다.
- 수동 컴파일 시 컴파일하는 자바 파일의 순서에 따라 상이한 동작을 초래한다.
예를 들어 다음 코드를 살펴보자
// 코드 25-1 두 클래스가 한 파일(Utensil.java)에 정의되었다. - 따라 하지 말 것! (150쪽)
class Utensil {
static final String NAME = "pan";
}
class Dessert {
static final String NAME = "cake";
}
// 코드 25-2 두 클래스가 한 파일(Dessert.java)에 정의되었다. - 따라 하지 말 것! (151쪽)
class Utensil {
static final String NAME = "pot";
}
class Dessert {
static final String NAME = "pie";
}
Utensil.java 파일과 Dessert.java 파일 2개가 있다. 그리고 다음 main 메서드를 실행한다고 생각해보자
public class Main {
public static void main(String[] args) {
System.out.println(Utensil.NAME + Dessert.NAME);
}
}
위에처럼 톱레밸 클래스 2개를 하나의 파일에 작성하면 원치 않는 결과가 나타날 수 있다.
//실행 결과 : potpie
javac Main.java Dessert.java
//실행 결과 : pancake
javac Main.java Utensil.java
■ 정리
- 소스 파일 하나에는 반드시 톱레밸 클래스(혹은 톱레밸 인터페이스)를 하나만 담자. 이 규칙을 따르면 소스 파일을 어떤 순서로 컴파일하든 동작이 달라지는 일은 일어나지 않는다.
'Effective Java' 카테고리의 다른 글
[Effective Java] 아이템27 비검사 경고를 제거하라 (0) | 2021.05.22 |
---|---|
[Effective Java] 아이템26 로 타입은 사용하지 말라 (0) | 2021.03.08 |
[Effective Java] 아이템24 멤버 클래스는 되도록 static으로 만들라 (0) | 2021.03.01 |
[Effective Java] 아이템23 태그 달린 클래스보다는 클래스 계층구조를 활용하라 (0) | 2021.03.01 |
[Effective Java] 아이템22 인터페이스는 타입을 정의하는 용도로만 사용하라 (2) | 2021.03.01 |