[Java] 자바는 컴파일언어? 인터프리터언어?

오늘 cs공부를 하다가 컴파일언어와 인터프리터 언어의 차이점에 대해서 보게 되었다. 근데 문득 python, R, JavaScript는 인터프리터 언어에 속해있고 C, C++과 같은 언어는 컴파일 언어에 속해있는데, 자바는 어디에도 속해있지 않는 것을 보고 자바는 어디에 속한 언어일까? 라는 생각을 하게 되었다.

결론적으로 자바가 어느곳에서 속해있지 않는 이유는 자바는 컴파일 언어이기도 하고 인터프리터 언어이기도 하기 때문이다.

images_tsi0521_post_d4e1c6d1-6cfc-46c2-8671-4cc98a74985f_Untitled-drawing-1

왜 그런지에 대해서 한번 알아보자

자바는 컴파일 언어?


자바 언어의 경우 다른 컴파일 언어가 작동하는 방식처럼 전체 소스코드를 컴파일러를 이용해 한번에 번역한다.

이때 사용하는 컴파일러를 자바 컴파일러(Java Compiler) 라고 한다.

이 자바 컴파일러는 우리가 사용하는 언어를 JVM이 이해할 수 있도록 바이트 코드로 번역시켜준다.

이때 컴파일된 자바 바이트 코드는 .class의 형태로 저장된다.

이 과정만 본다면? 자바는 컴파일언어가 맞다고 생각이 들 수 밖에 없다.



자바는 인터프리터 언어?


하지만 변환시킨 자바 바이트 코드의 경우 자바 가상 머신인 JVM(Java Virtual Machine)의 인터프리터를 이용해서 한 줄씩 실행된다.

자세히 말하자면 위 컴파일 과정에서 만들어진 자바 바이트 코드로 작성되어 있는 실행 프로그램을 자바 인터프리터가 한 줄씩 읽으면서 이진 코드로 번역 후 실행시킨다는 의미이다.

이 부분을 보면 또 자바는 인터프리터 언어가 맞다고 생각이 든다.

추상 클래스는 위와 같이 abstract를 class 앞에 붙여서 사용한다.

추상클래스는 전체적으로 구체적인 구성이 되어 있지 않고 설계만 되어있는 클래스라고 정의할 수 있다.

하나 이상의 추상 메서드를 포함하는 클래스를 가리켜 추상 클래스(abstract class)라고 한다.



그래서 자바는?


images_tsi0521_post_0d7f779b-7ee9-41d1-b1d1-d597cf6f52a1_자바컴파일러와자바인터프리터

결론적으로 자바는 위처럼 컴파일 언어의 특성도 가지고 있고 인터프리터 언어의 특성도 가지고 있기에 하이브리드 언어라는 이름으로 불린다고 한다.

하지만 자바에서는 인터프리터의 한 줄씩 읽는 특성에 집중하기 보다 플랫폼에 독립적으로 작동할 수 있게 사용됨을 중점을 두고 인터프리터를 이해하는 것이 더 좋을 것 같다는 의견이 있다.

실제로 자바가 처음 만들어졌을 때 인터프리터 언어로 만들어졌다가 성능 향상을 위해서 컴파일 언어의 장점을 가져왔다고 한다.

Categories:

Updated: