728x90
톱레벨 클래스란?
/* in Oracle */
A top level class is a class that is not a nested class.
- 중첩되지 않은 클래스
- 즉, 다른 클래스나 인터페이스 내부에 선언되지 않은 클래스를 의미
톱 레벨 클래스를 여러 개 선언한다면, 심각한 위험을 감수해야 한다.
- 한 클래스를 여러 가지로 정의할 수 있기 때문에, 어느 소스파일을 먼저 컴파일하냐에 따라 뭘 사용할지가 달라진다.
ex) Utensil과 Dessert가 모두 Utensil.java에 저장되어 있는 경우
public class item25 {
public static void main(String[] args) {
System.out.println(Utensil.NAME + Dessert.NAME); //pancake
}
}
출력 1. javac Main.java Utensil.java // pancake
출력 2. javac Dessert.java Main.java // potpie
아래와 같이 두 클래스를 한 파일에 정의하는 코드는 컴파일러에 어느 소스 파일을 먼저 전달하느냐에 따라 동작이 달라질 수 있다.
//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";
}
-> 따라서, 톱레벨 클래스를 서로 다른 소스 파일로 분리해야 한다.
//Utensil.java
class Utensil {
static final String NAME="pan";
}
//Dessert.java
class Dessert {
static final String NAME="cake";
}
-> 여러 톱레벨 클래스를 한 파일에 담고 싶으면 정적 멤버 클래스를 사용하자.
- private으로 선언해 접근 범위도 관리하는 것을 잊지 말자.
public class item25 {
public static void main(String[] args) {
System.out.println(Utensil.NAME + Dessert.NAME); //pancake
}
private static class Utensil{
static final String NAME="pan";
}
private static class Dessert{
static final String NAME="cake";
}
}
하나의 소스 파일에는 하나의 톱레벨 클래스만 담자.
단일책임 원칙(Single Responsibility Principle)과 비슷한 느낌이 아닐까 하는 생각이 들었다.
728x90
'JAVA > Effective Java' 카테고리의 다른 글
item 27. 비검사 경고를 제거하라 (0) | 2022.05.10 |
---|---|
item 26. 로 타입은 사용하지 말라 (0) | 2022.05.10 |
item 24. 멤버 클래스는 되도록 static 으로 만든다. (0) | 2022.05.07 |
item 23. 태그 달린 클래스보다는 클래스 계층 구조를 활용하라 (0) | 2022.05.07 |
item 22. 인터페이스는 타입을 정의하는 용도로만 사용하라 (0) | 2022.05.03 |
댓글