Programming/Java

[Effective Java] item25 - 톱레벨 클래스는 한 파일에 하나만 담으라

VSFe 2021. 3. 24. 18:24
톱레벨 클래스는 한 파일에 하나만 담으라!

사실 일반적으로는 톱레벨 클래스를 한 파일에 두 개 이상 담는 일이 거의 없다. 특히 어지간한 IDE에서는 절대로 그런짓을 못 하게 한다. 왜 그럴까?

이 책에 따르면, "한 클래스를 여러 가지로 정의할 수 있으며, 컴파일하는 순서에 따라 어떤 것을 사용하는지 달라진다." 라고 적혀있다. 직접 코드를 짜보자.

// Driver.java
public class Driver {
    public static void main(String[] args) {
        System.out.println(MainMenu.NAME + SideMenu.NAME);
    }
}

// MainMenu.java
class MainMenu {
    static final String NAME = "Chicken";
}

class SideMenu {
    static final String NAME = "CheeseBall";
}

// SideMenu.java
class MainMenu {
    static final String NAME = "Pizza";
}

class SideMenu {
    static final String NAME = "Spagetti";
}

이런식으로 코드를 짜면 인텔리제이에서는 오류를 뿜는다. "Duplicate class found in the file ~~" 이런 식으로 말이다. 수동으로 컴파일 하게 되면,

  • javac Driver.java - ChickenCheeseBall
  • javac Driver.java MainMenu.java - ChickenCheeseBall
  • javac Driver.java SideMenu.java - PizzaSpagetti

라는 결과를 뿜는다. 즉, 중복 정의하게 될 경우 상황에 따라 다른 결과가 나올 수 있다!!

이런 문제를 어떻게 해결할까? 사실 이런 문제가 발생하는 경우도 거의 없을 것이다. 말했듯이, 우리는 톱레벨 클래스를 한 파일에 두 개 이상 담지 않으니까... 만약 굳이 한 파일에 넣겠다면 정적 멤버 클래스로 만드는걸 권장한다.