Effective Java - 클래스와 인터페이스(6)

SeungHyuk Shin·2021년 9월 29일
0

Effective Java

목록 보기
13/26
post-thumbnail

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


파일 하나에 톱레벨 클래스를 여러 개 선언하는 것은 위험하다.

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

  • 이렇게 하면 한 클래스를 여러가지로 정의할 수 있으며, 그중 어느 것을 사용할지는 어느 소스 파일을 먼저 컴파일하냐에 따라 달라지기 때문이다.

운이 좋아 서로 다른 패키지에 위치 한다 하여 컴파일 에러가 발생하지 않더라도 컴파일 순서에 따라 예상치 못한 결과가 출력될 수도 있다.

TO - BE

해결책은 톱레벨 클래스를 서로 다른 클래스로 분리하는 것이다. 굳이 여러 톱레벨 클래스를 한 파일에 담고 싶다면 정적 멤버 클래스를 사용할 수 있다.

다른 클래스에 딸린 부차적인 클래스라면 정적 멤버 클래스로 만드는 쪽이 일반적으로 더 나을 것이다. 읽기 좋고, 접근 범위도 최소로 관리할 수 있기 때문이다.

소스 파일 하나에는 반드시 톱레벨 클래스(혹은 톱레벨 인터페이스)를 하나만 담자.

이 규칙만 따른다면 컴파일러가 한 클래스에 대한 정의를 여러 개 만들어내는 일은 사라진다.그렇게 하면 소스 파일을 컴파일하는 순서에 따라 프로그램의 동작이 달라지는 일은 결코 일어나지 않을 것이다.

0개의 댓글