Effective Java 25. 톱레벨 클래스는 한 파일에 하나만 담으라

Jung Ho Seo·2020년 7월 26일
0

EffectiveJava

목록 보기
6/35

Top level class

소스 파일 하나에 톱레벨 클래스를 여러 개 선언하더라도 자바 컴파일러는 불평하지 않는다.

하지만 아무런 득이 없을 뿐더러 심각한 위험을 감수해야 하는 행위다.

예시


public class Main {
    public static void main(String[] args) {
    	System.out.println(Utensil.NAME + Dessert.NAME);
    }
}

두 클래스가 한 파일에 정의되었다 - 따라하지 말것


// Untensil.java

class Untensil {
	static final String NAME = "pan";

}

class Dessert {
	static final String NAME = "cake";

}

물론 Main을 실행하면 pankake를 출력한다.

이제 우연히 똑같은 두 클래스를 담은 Dessert.java라는 파일을 만들었다고 해보자


// Dessert.java

class Untensil {
	static final String NAME = "pot";

}

class Dessert {
	static final String NAME = "pie";

}

운 좋게도 javac Main.java Dessert.java 명령으로 컴파일하다면 오류가 나고 중복 정의에 대해서 알려줄 것이다. 하지만 명령어를 조금 만 실수한다면 의도한 결과와 다른 결과를 얻을 수 있다.

이처럼 컴파일러에 어떤 소스파일을 먼저 건네느냐에 따라 동작이 달라지므로 반드시 잡아야할 문제다

해결책은 간단하다. 톱레벨 클래스들을 서로 다른 소스파일로 분리하면 그만이다.

소스 파일 하나에는 반드시 톱레벨 클래스 하나만을 담자

profile
책, 글, 개발

0개의 댓글