Top Level class
top level class
- nested class 가 아닌 모든 클래스를 말합니다
Java 에서는 하나의 소스 파일에 여러개의 톱레벨 클래스를 가질 수 있습니다.
단 이 때 public class 는 파일 당 하나여야 하고, 해당 클래스의 이름은 파일명과 동일해야합니다
예를들어 A.java 가 있다면 아래와 같아야 합니다.
- 참고로 톱레벨 클래스는 private 접근제한자를 가질 수 없습니다 ( 가질 필요가 없습니다. 아무도 접근 못하는 클래스는 의미가 없겠죠?)
public class A {}class B {}
상황
💥 소스 파일 하나에 여러개의 톱레벨 클래스를 가질 경우, 하나의 클래스를 여러가지로 정의할 수 있어진다는 문제가 생깁니다
이 때 💥 여러 정의 중, 어느 것을 사용할지는 어느 소스파일을 먼저 컴파일하냐에 따라 달라집니다.
이런식으로 컴파일러에 어느 소스파일을 먼저 건네느냐에 따라 동작이 달라지는 것은 당연히 있어선 안되는 일입니다. 소스파일을 어떤 순서로 컴파일하든, 바이너리 파일이나 프로그램의 동작이 달라져선 안됩니다.
결론
위와 같이 컴파일 시 건네주는 소스파일 순서에 따라 동작이 달라지는 상황이 일어나지 않기 위해서는
- 톱레벨 클래스들을 서로 다른 소스 파일로 분리하면 됩니다.
- 여러 개의 클래스를 두고 싶다면, 정적 멤버 클래스를 사용하는 방법을 고려해보는 것을 추천합니다.
- 정적 중첩 클래스는 private 으로 선언도 가능하며, 그 덕에 접근 범위도 최소로 관리할 수 있습니다.