본문 바로가기

자바

(이펙티브 자바) 아이템 25. 톱레벨 클래스는 한 파일에 하나만 담으라

파이리 이펙티브

들어가며

제목이 낯설다. 조금 더 명확하게 표현하면 다음과 같다.

  "하나의 java 파일에는 하나의 class를 생성하자."

왜 이렇게 해야 하는지 차근차근 살펴보자.

왜 하나의 java 파일에 여러 class 파일을 올리면 안 돼?

자바 개발을 하다보면 기술적으로 가능하지만, 관례적으로 사용하지 않는 몇 가지가 있다. 당장 생각나는 간단한 예로 변수는 Camel case(ex. userName)로 표기하고, 상수는 Snake case(ex. USER_TYPE)로 표현하는 것이 있다. 

 

같은 맥락으로 하나의 자바 파일에는 하나의 클래스 생성을 원칙으로 한다. 이유는 다음과 같다.

 

  1. 패키지 트리구조로 파악되지 않는 클래스가 생긴다.
  2. 수동 컴파일 시 컴파일하는  자바 파일의 순서에 따라 상이한 동작을 초래할 수 있다.

예제1. 하나의 자바 파일 안에 여러 클래스를 생성

예제 1처럼 자바 파일을 열어보기 전까지 MultiClassA와 MultiClassB의 존재를 알아채기 쉽지 않다. 물론 요즘에는 보통 IDE에서 Auto complie을 기본으로 지원하기 때문에 수동으로 컴파일할 일도 없을뿐더러 숨어있는 클래스까지 파악 가능하다. 다만 책이 쓰이던 시기에는 이러한 문제가 실제로 업무현장에서 빈번하게 있었으리라 생각된다.

 

해결방법은 간단하다. '하나의 자바 파일에는 하나의 클래스' 원칙을 지키면 된다. 꼭 같은 자바파일 내에 여러 클래스를 만들어야 한다면  private static inner class로 선언하여 Scope를 제한한다는 조건 하에 생성해도 된다. 

마치며

이번 아이템의 내용은 간단했다. '하나의 자바 파일에는 하나의 클래스' 원칙을 지키자는 내용이 전부다.

 

필자 역시 IDE의 세례를 받았다. 수동 컴파일은 공부할 때 말고는 해본적이 없기 때문에 이런 문제가 발생할 수 있다는 사실도 처음 알게 되었다. 지금까지 별생각 없이 하나의 자바 파일에 여러 클래스를 선언했었다면 이번 글을 계기로 최대한 작게 클래스를 분류하는 방법으로 개발해 보기를 바란다. 재활용성도 높아지며 훨씬 편한 디버깅을 경함 할 수 있을 것이다.


이펙티브 자바 Effective Java 3/E
국내도서
저자 : 조슈아 블로크(Joshua Bloch) / 이복연(개앞맵시)역
출판 : 인사이트 2018.11.01
상세보기