Effective Java
[Effective Java] 아이템25 톱레밸 클래스는 한 파일에 하나만 담으라
byeongoo
2021. 3. 2. 23:37
■ 하나의 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
■ 정리
- 소스 파일 하나에는 반드시 톱레밸 클래스(혹은 톱레밸 인터페이스)를 하나만 담자. 이 규칙을 따르면 소스 파일을 어떤 순서로 컴파일하든 동작이 달라지는 일은 일어나지 않는다.