본문은 Effective Java를 읽고 정리한 내용을 기반으로 작성된 글입니다.
말 그대로..
☑️ 톱레벨 클래스 중복정의 예시
- Utensil과 Dessert를 참조하는 Main 클래스
public class Main {
public static void main(String[] args) {
System.out.println(Utensil.NAME + Dessert.NAME);
}
}
- Utensil.java
class Utensil {
static final String NAME = "pan";
}
class Dessert {
static final String NAME = "cake";
}
Main클래스와 Utensil클래스만 있는 상태에서 Main을 실행하면 pancake를 출력한다.
- Dessert.java
class Utensil {
static final String NAME = "pot";
}
class Dessert {
static final String NAME = "pie";
}
여기서 우연히 똑같은 내용의 Dessert 클래스가 추가된다면?
컴파일러는
- Main.java 컴파일 → 그 안에서 Utensil.java 파일을 살펴 Utensil클래스와 Dessert 클래스를 찾아냄
- Dessert.java파일을 살필 때 같은 클래스들의 정의가 이미 있음을 알게됨
- 컴파일 명령이 javac Main.java Utensil.java 인 경우 pancake 출력
- 컴파일 명령이 javac Dessert.java Main.java 인 경우 potpie 출력
→ 어느 소스파일을 먼저 건네느냐에 따라 오류가 발생할 수 있다
☑️ 중복정의 해결방법
: 단순히 톱레벨 클래스들을 서로 다른 소스 파일로 분리하면 된다
굳이 한 파일에 담고 싶다면 정적 멤버 클래스를 사용해보자.
'Book > 이펙티브 자바' 카테고리의 다른 글
[Effective Java] item 1. 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2023.12.28 |
---|---|
[Effective Java] item 24. 멤버 클래스는 되도록 static으로 만들어라 ** (1) | 2023.12.23 |
[Effective Java] item 23. 태그 달린 클래스보다는 클래스 계층구조를 활용하라 (0) | 2023.12.23 |