주제 : 톱클래스는 한 소스파일 안에 하나만 담아라.
아래 예시를 살펴보자
// Utensil.java
class Utensil {
static final String name = "pan";
}
class Dessert{
static final String name = "cake";
}
// Dessert.java
class Utensil {
static final String name = "pot";
}
class Dessert{
static final String name = "pie";
}
// Main.java
public static void main(String[] args){
System.out.println(Utensil.name, Dessert.name);
}
위와 같이 같은 내용이 있는 클래스 두개가 있을 때, pancake라는 결과를 출력하고 싶다고 가정하자
javac Main.java Dessert.java로 명령했다면 운좋게 클래스가 중복 정의 되어있다고 컴파일 결과를 알려줄것이다.
컴파일러는 Main.java를 먼저 컴파일하고 그 안에서 Dessert.name보다 먼저 나오는 Utensil.name 을 먼저 확인할 것이고 Utensil.java를 살펴 Utensil, Dessert를 모두 찾아낼 것이다. 이 후, Dessert.name을 처리할 때, 이미 같은 클래스가 정의됨을 알 수 있어서 컴파일 오류가 발생하는 것이다.
여기서의 정상적인 출력은 pancake가 된다.
하지만 만약, javac Dessert.java Main.java 명령으로 컴파일하면 potpie 출력과 함께 컴파일 오류를 잡지 못한다.
결론적으로, 컴파일 순서에 따라 결과가 달라지고 오류도 잡지 못할 수가 있다.
해결책은 그냥 톱 클래스는 하나의 소스에 하나만 넣자.
굳이 넣고 싶다면 정적 멤버 클래스를 사용하자
코드
https://github.com/mokjaemin/EffectiveJAVA
'Language > Java Plus' 카테고리의 다른 글
Effective JAVA - Item24 : 멤버 클래스는 되도록 static으로 만들어라 (0) | 2023.10.12 |
---|---|
Effective JAVA - Item23 : 태그 달린 클래스보다는 클래스 계층 구조를 활용하라 (0) | 2023.10.11 |
Effective JAVA - Item22 : 인터페이스는 타입을 정의하는 용도로만 사용하라 (0) | 2023.10.10 |
Effective JAVA - Item21 : 인터페이스는 구현하는 쪽을 생각해서 설계하라. (0) | 2023.10.09 |
Effective JAVA - Item20 : 추상 클래스보단 인터페이스를 우선시하라. (0) | 2023.10.09 |