본문 바로가기

Language/Java Plus

Effective JAVA - Item25 : 톱 클래스 파일은 한 파일에 하나만 담아라

 

 

 

 

 

주제 : 톱클래스는 한 소스파일 안에 하나만 담아라.

 

 

 

아래 예시를 살펴보자

// 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

 

GitHub - mokjaemin/EffectiveJAVA: Study Files Of Effective JAVA

Study Files Of Effective JAVA. Contribute to mokjaemin/EffectiveJAVA development by creating an account on GitHub.

github.com