728x90
public class Main{
public static vod main(String[] args){
System.out.println(Utensil.NAME + Dessert.NAME);
}
}
Main 은 Utensil 과 Dessert 클래스를 참조하는데 이 2개가 한파일에 정의되어있다고 가정하자.
class Utensil{
static final String NAME = "pen";
}
class Dessert{
static final String NAME = "sil";
}
우연히 같은 클래스를 가진 파일이 하나 더있게 되면
class Utensil{
static final String NAME = "pot";
}
class Dessert{
static final String NAME = "pie";
}
운이 좋다면 컴파일 단계에서 컴파일 에러가 나게 된다.
하지만 패키지 위치가 달라 실행이 되더라도
javac Main.java Utensil.java
javac Dessert.java Main.java 등 컴파일 순서가 달라짐에 따라 실행결과가 전혀 달라진다. (코드 실행결과가 컴파일러에 의존성을 가지게 된다.)
해결하는 방법은 클래스를 다른 파일로 분리하거나 다른 클래스와 딸린 부차적인 클래스라면 정적멤버 클래스를 사용하는 것이다.
접근 제어도 관리하고 읽기 쉬워진다는 장점이 생긴다.
다음은 정적멤버 클래스로 위 클래스를 바꿔본 것이다.
public class Main {
public static void main(String[] args) {
System.out.println(Utensil.NAME + Dessert.NAME);
}
private class Utensil{
static final String NAME = "pen";
}
private class Dessert{
static final String NAME = "pen";
}
}
'JAVA > Effective Java' 카테고리의 다른 글
item 27) 비검사 경고를 제거하라 (0) | 2021.01.22 |
---|---|
item 24) 멤버 클래스는 되도록 static으로 만들라 (0) | 2021.01.17 |
item 18) 상속보다는 컴포지션을 사용하라 (0) | 2021.01.11 |
item 13) clone 재정의는 주의해서 진행하라 (0) | 2021.01.04 |
item 12) toString을 항상 재정의하라 (0) | 2021.01.03 |