이펙티브 자바 아이템25

한주영·2023년 12월 7일
0

이펙티브자바

목록 보기
19/33

톱 레벨 클래스는 한 파일에 하나만 담으라

•소스파일 하나에 톱레벨 클래스를 여러개 선언하더라고 자바컴파일러는 불평하지않지만 아무런 득이없고 심각한 위험감수를 해야함

•한클래스를 여러가지로 정의->어느것을 사용할지는 어느소스파일을먼저 컴파일 하느냐에따라 달라진다

예시

     public static void main(String[] args) {

         System.out.println(Utensil.NAME+Dessert.NAME);
     }

집기(Utensil)와 디저트(Dessert)클래스가 한 파일에 정의되있다고 가정

두클래스가 한파일에 정의->따라하지 말것!

 class Utensil {
     
     static final String NAME="pen";
 }

class Dessert{
     
     static final String NAME="cake";
     
}
 class Utensil {
     
     static final String NAME="pot";
 }

class Dessert{
     
     static final String NAME="pie";
     
}

javac.Main.java Dessert.java명령으로 컴파일-> 컴파일 오류
(Utensil,Dessert)클래스를 중복정의

컴파일러는 Main.java를 컴파일하고, 그안에서 Utensil참조를 만나면
Utensil 파일을 살펴 두 클래스모두 찾아낸다.

javac.Main.java나 javac Main.java Utensil.java명령으로 컴파일하면 Dessert.java 파일을작성하기 전처럼 pancke를 출력

-->어느 소스 파일을 먼저 건네느냐에따라 동작이 달라진다

해결책은 톱레벨 클래스를 서로 다른 파일로 분리하면 된다

앞의예시를 정적 맴버 클래스로 바꿔본 예


public class Test {


    public static void main(String[] args) {
        System.out.println(Utensil.NAME+ com.example.java.Dessert.NAME);
    }
    
    private  static class Utensil{
        static final String NAME="pan";
        
    }
    
    private static class Dessert{
         static final String NAME="cake";
    }
}
profile
백엔드개발자가 되고싶은 코린이:)

0개의 댓글