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파일이 생긴다.
그리고 이 class파일을 실행시킨다.
*문법: java 파일명
이렇듯 자바는 굳~이 컴파일을 한 후, 컴파일 된 byte code를 실행시키는 번거로운 과정을 거친다.
걍 컴파일이랑 실행을 합쳐가지고 한번에 하면 될 것이지, 굳이 나눠서 개발자들 번거롭게 하는 이유는 무얼까?
하고 궁금할 것이다. (나는 궁금했따.)
이유는 이렇다.
VM(자바 실행 프로그램)이 이렇게 얻어진 byte code(.class 파일)를 실행할 때에는 컴파일 과정에서 진행한 일들을 진행하지 않고 말 그대로 실행만 한다.
때문에 소스 코드보다 이해가 쉽기 때문에 속도가 더 빠를 뿐만 아니라, 매번 소스코드 문법을 검사하는 등 불필요한 작업을 생략할 수 있어 효율적이다.
이런 이유 외에도, 사람들이 이해할 수 있는 소스코드를 외부 사람들로부터 보호(?)하고자 하는 의도도 있다.
그렇다고 무조건 컴파일한 bytecode를 실행하는 방식이 좋다고만 할 수는 없다.
이 방식은 소스코드를 변경하게되면 그 때마다 컴파일 -> 실행의 과정을 거쳐야 한다는 번거로움이 따른다.
즉, 소스코드를 바로 실행하게 되면 프로그램 배포가 쉽다.
프로그램을 변경할 때마다 컴파일 할 필요 없이 바로 배포하면 되니까.
대표적인 예로 NodeJS를 들 수 있다.
자바스크립트는 컴파일이 필요 없고, 바로 실행할 수 있다.
이렇게 장/단점이 있다는거.
참고로 이클립스를 쓰면, 소스코드 파일을 저장할때마다 알아서 자동으로 컴파일을 돌려서 클래스 파일을 만들어준다.
그래서 이런 번거로움을 느끼지 못할 것이다.
반응형