Home [Effective Java] Item25. 톱레벨 클래스는 한 파일에 하나만 담으라!
Post
Cancel

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

Item25. 톱레벨 클래스는 한 파일에 하나만 담으라!

톱레벨 클래스

중첩이 아닌 단일 형태의 클래스

  • 자바 컴파일러는 한 파일에 톱레벨 클래스가 여러 개 선언되어도 불평하지 않는다.
    • 하지만 이러한 방법은 득이 없고, 위험을 감수해야 하는 실만 있다.
1
2
3
4
5
6
7
8
// A.java
class A {
		static final String NAME = "hello";
}

class B {
		static final String NAME = "world!";
}
1
2
3
4
5
6
7
8
// B.java
class A {
		static final String NAME = "younghwan";
}

class B {
		static final String NAME = "kim";
}
  • 두 개의 톱레벨 클래스를 만들고, 실행한다.
  • 이렇게 되면 어떤 패키지의 클래스가 먼저 실행되느냐에 따라 다른 결과를 출력하게 된다. 이는 반드시 바로 잡아야하는 문제다.

해결 방안

  • 아주 간단하다. 단순히 톱레벨 클래스들을 서로 다른 소스 파일로 분리하면 된다.
  • 굳이 여러 톱레벨 클래스를 한 파일에 담아 사용하고 싶다면 정적 멤버 클래스를 사용하는 방법을 사용할 수 있다.
    • 다른 클래스에 딸린 부가적 클래스인 경우, 정적 멤버 클래스로 만드는 편이 더 나을 것.

핵심 정리

  • 소스 파일 하나에는 반드시 톱레벨 클래스(혹은 톱레벨 인터페이스)를 하나만 담자.
    • 그러면 앞서 컴파일러가 한 클래스에 대한 정의를 여러 번 내려 생긴 문제는 사라진다.
  • 소스 파일을 어떤 순서로 컴파일하든 바이너리 파일이나 프로그램의 동작이 달라지는 일은 결코 일어나지 않을 것이다.
This post is licensed under younghwani by the author.

[Effective Java] Item24. 멤버 클래스는 되도록 static으로 만들라!

[Effective Java] Item26. 로 타입은 사용하지 말라!

Comments powered by Disqus.