[Java] 자바에서 파일 명과 클래스 명이 같아야 하는 이유

2223 단어 JavaclassfileJVMJVM

자바를 공부하다 클래스에 들어가면 항상 듣는 이야기가 있어요.

자바에선 파일 명과 안에 클래스 이름 명은 동일해야 합니다.

실제로 다른 클래스 형을 선언할 수 없어서, 그냥 그렇구나아...하고 넘어갔지만 이번 기회에 왜 그럴 수 없는지에 대해 찾아봤어요.

번역하자면,

  • 자바 프로그램을 .java 확장 파일로 작성하고, 이를 컴파일하게 되면 .class 확장명의 바이트 코드가 생성되요. 이를 서로 동일한 이름으로 해야 별다른 모호성 없이 이해를 하기가 쉬워지죠. 물론 public class가 아닌 class는 얼마든지 선언은 가능해요(!). public class에 한해서 파일 명과 클래스 명은 동일해야 해요.
  • 그렇게 일치가 되어야 JVM이 이를 진입점Entry Point로 인식을 하기 때문이에요.
  • 하나 이상의 클래스를 가지고 있는 프로그램을 만든다 가정해 보면, 이는 동일한 개수의 .class 파일을 만들게 되겠죠. 이러한 상황에서 자바 인터프리터는 해석해야 하는 클래스와 프로그램 진입점을 포함하는 클래스를 식별하기 쉽지 않죠. 그래서 이름을 동일하게 해서 구분하기 쉽게 하는 거에요(이건 의역 ㅎ)

결국 JVM에서 이렇게 돌아가도록 구현해놨고, 클래스 식별을 쉽게 하기 위한 것이라고 볼 수 있겠어요. 그리고 이번에 공부하면서 알게된 사실인데 실제로 class는 따로 구현할 수가 있어요.

// 파일명 Test.java
class Test2 {} // 가능
// public class Test3 {} // 불가
// private class Test4 {} // 불가

public class Test{
	public class Test5 {} // 가능
}

이것저것 확인해보고 되는 것과 안되는 것을 구분해 봤어요 ㅎㅎ. 소소하지만 확실한 지식의 상승을 느끼네요.

참고

HoneyBee님의 블로그
영문 답변

좋은 웹페이지 즐겨찾기