Programming/Java

JAVA :: .java 파일과 .class 파일의 차이, 먼저 컴파일하는 이유

WANJIN 2017. 5. 1. 11:44
반응형

.java 파일

확장자가 'java'인 파일은 인간이 작성한 source code 파일이다.

.class 파일

확장자가 'class'인 파일은 source code 인 java파일을 자바 컴파일러를 통해 byte code(target code)로 변환한 byte code 파일이다.

왜 굳이 class파일로 변환한 다음, class파일을 실행시켜야 할까?

자바는 먼저 소스코드를 자바 컴파일러를 통해 기계가 쉽게 이해할 수 있는 bytecode로 이뤄진 class파일로 변환한다.
*문법: javac 파일명.java
참고로, 컴파일 과정에서는 소스코드를 분석하고, 문법의 유효성을 검사를 한다.
이렇게 모든 검열(?)을 마치고서야 class파일을 우리는 얻을 수가 있다.

이렇게 컴파일이라는 것을 하게되면 class파일이 생긴다.
그리고 이 class파일을 실행시킨다.
*문법: java 파일명

이렇듯 자바는 굳~이 컴파일을 한 후, 컴파일 된 byte code를 실행시키는 번거로운 과정을 거친다.
걍 컴파일이랑 실행을 합쳐가지고 한번에 하면 될 것이지, 굳이 나눠서 개발자들 번거롭게 하는 이유는 무얼까?
하고 궁금할 것이다. (나는 궁금했따.)

이유는 이렇다.
VM(자바 실행 프로그램)이 이렇게 얻어진 byte code(.class 파일)를 실행할 때에는 컴파일 과정에서 진행한 일들을 진행하지 않고 말 그대로 실행만 한다.
때문에 소스 코드보다 이해가 쉽기 때문에 속도가 더 빠를 뿐만 아니라, 매번 소스코드 문법을 검사하는 등 불필요한 작업을 생략할 수 있어 효율적이다.
이런 이유 외에도, 사람들이 이해할 수 있는 소스코드를 외부 사람들로부터 보호(?)하고자 하는 의도도 있다.


그렇다고 무조건 컴파일한 bytecode를 실행하는 방식이 좋다고만 할 수는 없다.

이 방식은 소스코드를 변경하게되면 그 때마다 컴파일 -> 실행의 과정을 거쳐야 한다는 번거로움이 따른다.
즉, 소스코드를 바로 실행하게 되면 프로그램 배포가 쉽다.
프로그램을 변경할 때마다 컴파일 할 필요 없이 바로 배포하면 되니까.

대표적인 예로 NodeJS를 들 수 있다. 
자바스크립트는 컴파일이 필요 없고, 바로 실행할 수 있다.

이렇게 장/단점이 있다는거.

참고로 이클립스를 쓰면, 소스코드 파일을 저장할때마다 알아서 자동으로 컴파일을 돌려서 클래스 파일을 만들어준다.
그래서 이런 번거로움을 느끼지 못할 것이다.


반응형