본문 바로가기
IT 기본지식

컴파일 언어와 인터프리터 언어의 차이 | Java는 어떤 언어인가?

by 내기록 2022. 8. 27.
반응형

https://medium.com/nothing-but-the-objectivetruth/should-i-learn-an-interpreted-or-compiled-language-a59caf955778

 

컴파일 언어

소스 코드를 기계어로 컴파일해서 실행파일을 만들어 실행하는 방식이다.

컴파일 언어는 원시코드(프로그래머가 작성한 소스코드)를 한 번에 기계어로 변환하여 실행 파일을 만든다.

컴파일 언어는 컴파일 단계와 실행 단계가 각각 분리되어 있으며, 컴파일은 단 한번만 수행한다.

런타임 상황에서는 이미 기계어로 모든 소스코드가 변환되어 있기 때문에 인터프리터에 비해 빠르게 실행할 수 있다.

C, C++과 같은 언어들이 대표적인 컴파일 언어이다.

 

* 컴파일러 : 고급 언어로 작성된 소스코드를 저급 언어로 번역하는 프로그램이다.
고급언어는 사람이 이해하기 쉽도록 작성된 프로그래밍 언어이며 저급언어는 컴퓨터 내부에서 바로 처리가 가능한 언어로 기계어와 어셈블리어가 이에 속한다.

 

 

특징

기계어로 컴파일된 실행파일을 실행하기 때문에 속도가 빠르다.

한 번에 모든 코드를 컴파일하기 때문에 실행 전에 오류를 파악할 수 있다.

코드를 수정하면 다시 컴파일 과정을 거쳐야 한다.

 

 

인터프리터 언어

코드를 한 줄씩 읽어 내려가며 실행하는 방식이다.

인터프리터 언어는 소스코드를 기계어로 변환하는 과정 없이 한줄씩 해석하여 바로 명령어를 실행하는 언어를 말한다.

 

인터프리터 언어는 소스 코드를 한번에 기계어로 변환하는 컴파일러와 달리 컴파일 하지 않고 소스 코드를 한 줄씩 읽어서 실행한다.

컴파일하는 과정이 없기 때문에 컴파일 시간은 없지만, 인터프리터 언어는 실행 시마다 인터프리트 과정이 수행되어야 하기 때문에 비교적 실행 속도가 느리다.

 

R, Python, Ruby와 같은 언어들이 대표적인 인터프리터 언어이다.

 

Runtime에서 인터프리터가 한 줄씩 실시간으로 읽어서 실행하기 때문에 컴파일 언어에 비해 속도가 느리다.

실행 속도는 느릴 수 있지만 코드 변경 시 빌드없이 바로 실행이 가능하다는 장점이 있다.

 

특징

줄 단위로 번역과 실행을 진행하기 때문에 속도는 컴파일 언어에 비해 느리다.

컴파일 언어처럼 따로 기계어로 변환하지 않기 때문에 빌드 시간이 없다.

프로그램을 수정하고 다시 컴파일 해야하는 과정이 생략된다.

오류가 있는 코드를 만나기 전까지 실행되며 실행 과정에서 오류를 파악할 수 있다.

 

 

 

Java는 컴파일 언어인가? 인터프리터 언어인가? 

자바 소스코드는 먼저 자바 컴파일러를 사용하여 바이너리 바이트 코드(.class)로 컴파일된 다음 이 바이트 코드가 소프트웨어 기반 인터프리터인 JVM(Java Virtual Machine)에서 실행된다. 따라서 자바는 컴파일과 인터프리터 둘 다 사용하는 것으로 간주된다.

 

https://www.javatpoint.com/java-interpreter

자바 컴파일러가 소스 코드(.java)를 자바 바이트 코드(.class)로 컴파일하고, 자바 인터프리터는 바이트 코드를 기계어가 이해할 수 있는 기계코드로 변환(convert)하거나 번역(translate)한다.

 

바이트 코드를 기계 코드로 변환하기 위해 자바 가상머신(JVM)에 .class 파일을 배포하면 JVM은 자바 인터프리터를 사용하여 그 코드를 기계 코드로 변환한다. JVM은 런타임에 인터프리터를 사용하고, 그 후 호스트 시스템에서 코드를 실행한다.

 

 

 

 

References

https://jhkang-tech.tistory.com/136

https://gusrb3164.github.io/computer-science/2021/03/01/compile,-interpreter-language/

https://velog.io/@congaweb/compiler-interpreter

https://www.javatpoint.com/is-java-interpreted-or-compiled

https://www.javatpoint.com/java-interpreter

반응형

댓글