[Why]
class Utensil {
static final String NAME = "pan";
}
class Dessert {
static final String NAME = "cake";
}
// 두 클래스가 한 파일(Utensil.java)에 정의되었다.
public class Main {
public static void main(String[] args) {
System.out.println(Utensil.NAME + Dessert.NAME);
}
}
- Main을 실행하면 pancake를 출력한다.
class Utensil {
static final String NAME = "pot";
}
class Dessert {
static final String NAME = "pie";
}
// 두 클래스가 한 파일(Dessert.java)에 정의되었다.
- javac Main.java / javac Main.java Utensil.java 명령: Dessert.java 파일을 작성하기 전처럼 pancake를 출력
- javac Dessert.java Main.java 명령: potpie 출력
- javac Main.java Dessert.java 명령: 컴파일 오류(Utensil, Dessert 클래스 중복 정의)
어느 소스 파일을 먼저 컴파일하냐에 따라 어느 것을 사용할 지가 달라진다.
[How]
- 톱레벨 클래스들(Utensil과 Dessert)을 서로 다른 소스 파일로 분리하면 된다.
- 굳이 한 파일에 담고 싶으면 정적 멤버 클래스(아이템24)를 사용하는 방법을 고민해볼 수 있다.
public class Test {
public static void main(String[] args) {
System.out.println(Utensil.NAME + Dessert.NAME);
}
private static class Utensil {
static fianl String NAME = "pan";
}
private static class Dessert {
static final String NAME = "cake";
}
}
'독서찰기(讀書札記) > 이펙티브 자바' 카테고리의 다른 글
[아이템 27] 비검사 경고를 제거하라 (0) | 2022.02.07 |
---|---|
[아이템 26] 로 타입(raw type)은 사용하지 말라 (0) | 2022.02.06 |
[아이템 24] 멤버 클래스는 되도록 static으로 만들라 (0) | 2022.02.05 |
[아이템 23] 태그 달린 클래스보다는 클래스 계층구조를 활용하라 (0) | 2022.02.05 |
[아이템 22] 인터페이스는 타입을 정의하는 용도로만 사용하라 (0) | 2022.02.05 |