Programming/JAVA

자바 클래스 파일과 소스파일. 하나의 자바소스파일에 2개 이상의 클래스가 오는 경우. 2021-10-15

최동훈1 2021. 10. 15. 16:00

열심히 chap03의 회원등록 서비스를 만들던중 의문이 생겼다. 그 전에는 무심코 지나쳤던 것에대해 의문이 생겼던 것이다. 하나의 자바 파일에 몇개의 클래스를 정의할수 있을까? 제한은 없을까? 자바 소스파일(.java)와 실제로 만들어지는 클래스는 어떤 관계가 있을까? 란 궁금증이 생겼다.

 

 바로 하나의 자바파일안에 두개 이상의 클래스를 만들수 있다는 사실을 난 이유도 모른체 무심코 알고리즘 풀때부터 계속 쓰고 있었다.

하나의 소스파일에 2개 이상의 클래스를 정의한 경우.

나는 이게 왜 성립되는지 알지 못했다. 그리고 컴파일 했을때, 이클립스나 인텔리제이에서는 별도의 class 로 나오는 것도 신기했다.

이클립스 편집기에 각각의 클래스파일로 등록되있는 모습.

 

 

그래서 자바의 정석, 명품 자바 Essential 을 참고하니, 자바 소스파일에 작성가능한 클래스에 대해서 정확하게 알게되었다.

 

 

1.모든 자바 에플리케이션에는 반드시 한개의 Main 메서드가 정의된 클래스가 존재하여야 하고, 모든 자바 에플리케이션의 시작은 Main 메서드가 정의되어 있는 클래스를 실행하면서부터 시작된다.

 

2. 자바 소스파일(확장자명 .java)의 이름은 자바소스파일에 정의된 public 클래스의 이름과 동일하여야 한다.

 

3. 자바 소스파일에는 제한없이 클래스를 생성할수 있다. 그러나, 하나의 소스파일에는 한개의 public 클래스만 존재한다.

(없을수도 있다, public class가 없다면 다른 아무 클래스중 한개의 이름으로 자바파일의 이름을 정한다.)

 

4.자바 소스파일에 여러개의 클래스가 생성되었을때, 컴파일 하게되면 소스파일( .java)는 한개지만 각각의 클래스 파일이 생성된다.

 

나는 이번 기회에 내 머리에 완전히 위 규칙을 각인시키기 위해서 메모장으로 윈도우에 날코딩해서 각각의 클래스 파일이 생성되는 것을 눈으로 확인하고자 했다.

 

메모장에 규칙에 따라 클래스 2개를 생성

규칙에따라 A와 B라는 class를 생성한 뒤, C\Temp 파일에 A.java 란 이름으로 메모장을 저장했다.

 

윈도우 Cmd에서 실행

그런 다음, 윈도우 커맨드에서 해당 폴더로 이동한 뒤, Java 컴파일러로 내가 저장한 A.java 자바소스파일을 컴파일 했다.

여기서 확장자명(.java)를 컴파일할때 안붙이면 오류난다.

컴파일 완료후 클래스파일 생성된 모습.

컴파일을 하니, 자바소스파일( .java) 가 있던 폴더에 내가 정의한 2개의 클래스 파일이 각각따로 생성된 것을 알 수 있다.(규칙 4번)

 

 

그 다음다시 자바 인터프리터(Java.exe)로 A 를 실행하니 "A class" 라는 문자열이 나왔다. 

그리고 테스트 해보기 위해 B 클래스도 실행하니, Main 메서드가 없는 클래스는 실행할수 없다고 오류가 났다.

(위 규칙 1번)

 

메인메서드가 정의되지 않아서 클래스 실행이 안되는 모습.

 

결론: 하나의 자바소스파일에(이클립스나 인텔리제이도 마찬가지) 두개이상의 클래스 작성이 가능하다. 또 작성된 클래스는 각각의 클래스 파일을 갖는다.

 

공부시간 1시간 30분.

순공시간 1시간