자바를 공부하다 클래스에 들어가면 항상 듣는 이야기가 있어요.
자바에선 파일 명과 안에 클래스 이름 명은 동일해야 합니다.
실제로 다른 클래스 형을 선언할 수 없어서, 그냥 그렇구나아...하고 넘어갔지만 이번 기회에 왜 그럴 수 없는지에 대해 찾아봤어요.
번역하자면,
.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 {} // 가능
}
이것저것 확인해보고 되는 것과 안되는 것을 구분해 봤어요 ㅎㅎ. 소소하지만 확실한 지식의 상승을 느끼네요.