[Effective Java] 아이템 25 - 톱레벨 클래스는 한 파일에 하나만 담으라

HyeBin, Park·2022년 6월 29일
0

Effective Java Study

목록 보기
20/20
post-thumbnail

아이템 25 : 톱레벨 클래스는 한 파일에 하나만 담으라

톱레벨 클래스

A top level class is a class that is not a nested class. - oracle

  • 중첩 클래스가 아닌 단일 클래스

톱레벨 클래스를 여러개 선언하기

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";
}

// 두 클래스가 한 파일에 정의되어있다. Dessert.java
class Utensil {
	static final String NAME = "pot";
}
class Dessert {
	static final String NAME = "pie";
}
  • 한 클래스를 여러 가지로 정의할 수 있으며, 그중 어느것을 사용할지는 어느 소스 파일을 먼저 컴파일하냐에 따라 달라진다.
  • javac Main.java Dessert.java 순서로 컴파일 한다면 중복 정의되어 있다고 컴파일 오류가 날 것이다.
  • javac Main.java 나 javac Main.java Utensil.java 명령으로 컴파일 한다면 pancake가 출력 될 것이다.
  • javac Dessert.java Main.java 로 컴파일 한다면 potpie 를 출력한다.

해결책?

  • 톱레벨 클래스들을 서로 다른 소스 파일로 분리하면 그만
  • 여러 톱레벨 클래스를 한 파일에 담고 싶다면 정적 멤버 클래스를 사용하는 방법을 고민해볼 수 있다.
  • 다른 클래스에 딸린 부차적인 클래스라면 정적 멤버 클래스로 만드는 쪽이 일반적으로 더 나을 것이다.
    => 읽기 좋고 private로 선언하면 접근 범위도 최소로 관리할 수 있기 때문이다.

정적 멤버 클래스

public class Test {
	public static void main(String[] args) {
    	System.out.println(Utensil.NAME + Dessert.NAME);
    }
    
    private static class Utensil {
    	static final String NAME = "pan";
    }
    
    private static class Dessert {
    	static final String NAME = "cake";
    }
}

0개의 댓글