이펙티브 자바 #item 25 톱레벨 클래스는 한 파일에 하나만 담으라

임현규·2023년 1월 30일
0

이펙티브 자바

목록 보기
25/47
post-thumbnail
post-custom-banner

톱 클래스를 한 파일에 하나만 담는 이유

1. 가독성이 좋아진다.

보통 클래스는 하나의 책임을 가지고 정의한다. 한 파일에 하나의 클래스가 있다면 클래스를 파악하기 쉽고 이해하기 쉽다.

2. 파일에 클래스를 중복 정의하는 문제를 방지한다.

실수로 클래스를 중복 정의하게 되면, 컴파일 순서에 따라 에러가 발생하거나 다른 동작을 수행하게 된다.

예를 들어보자

// Main.java
public class Main {
	public satic void main(String[] args) {
    	System.out.println(Utensil.NAME + Desert.NAME);
    }
}
// Utensil.java
class Utensil {
	static final String NAME = "pan";
}

class Desert {
	static final String NAME = "cake";
}
// Desert.java
class Utensil {
	static final String NAME = "pot";
}

class Desert {
	static final String NAME = "pie";
}

만약 javac Main.java Desert.java로 컴파일을 했다면 Main.java에서 Utensil.NAME을 보고 먼저 처리하고 Desert.NAME을 처리하므로 Utensil.java 내용을 가져와 컴파일을 수행한다. 그 이후 Desert.java 컴파일을 수행하는데 해당 클래스는 이미 컴파일 되어 있으므로 컴파일 에러가 발생한다.

그러나 javac Main.javajavac Main.java Utensil.java의 경우 Main을 컴파일할 때 Utensil.NAME에 대한 내용이 없으므로 Utensil.java에서 컴파일에서 가져오고 Utensil.java는 같은 파일이니 별다른 문제 없이 "pancake"를 출력한다. javac Desert.java Main.java로 컴파일한 경우 Desert.java에서 Utensil과 Desert 관련 정보를 가져오므로 추가 컴파일을 진행하지 않고 Main.java를 컴파일하기 때문에 "potpie"를 리턴한다.

컴파일 순서에 따라 모두 리턴이 달라지는 문제가 생기기 때문에 이를 방지하기 위해 톱 클래스에는 하나의 클래스를 둔다.

profile
엘 프사이 콩그루
post-custom-banner

0개의 댓글