[Java] 컴파일러와 인터프리터

이동엽·2022년 7월 16일
0

java

목록 보기
7/18


컴파일러와 인터프리터는 모두 high-level language를 machine language로 변환하는 역할이다.

그리고 Java는 이 두 가지를 모두 사용한다. 따라서 두 가지를 사용하는 이유와 더불어 각각에 대해서 알아보겠다.


Java에서의 컴파일러와 인터프리터 역할

  • 컴파일러 : .java 파일을 javac(라고 하는 자바 컴파일러)가 바이트코드로 작성된 .class 파일로 변환한다.
    • 즉, 자바 소스 코드를 JVM을 위한 기계어로 변환한다.
  • 인터프리터 : .class 파일 내의 바이트코드를 특정 환경의 기계에서 실행할 수 있도록 한다.

Java는 왜 컴파일러와 인터프리터 모두 사용하는가?

  • 컴파일러는 코드를 바로 기계어로 변환하기 때문에 프로그램이 작성된 기계 상에서 실행할 때 매우 효율적이다.
    • 그러나 이것은 동시에 기계 종류에 종속된다는 말이기도 하다.
    • 따라서 인터프리터를 사용하는 이유가 여기서 나온다.

[인터프리터를 사용하는 이유]

  1. 인터프리팅은 플랫폼에 종속되지 않는다.
    • 물론 컴파일러를 먼저 수행하고 인터프리팅하는 과정이 있어, 컴파일 과정만 필요한 언어보다는 속도가 느리다.
  2. 자바 바이트 코드는 컴퓨터와 프로그램 사이에 별도의 버퍼 역할을 한다.
    • 이는 보안적으로 장점이 될 수 있다.

특징 정리

  • 컴파일러는 소스코드 전체를 컴퓨터 프로세서가 실행 할 수 있도록 바로 기계어로 변환한다.
  • 인터프리터는 고레벨 언어를 중간 코드(intermediate code)로 변환하고 이를 각 행마다 실행한다.
    • 이 중간 코드는 다른 프로그램에 의해 실행된다.
  • 일반적으로 컴파일러가 각 행마다 실행하는 특성을 가진 인터프리터보다는 실행시간이 빠르다.
  • 컴파일러는 전체 소스코드를 변환 한 뒤 에러를 보고하지만 인터프리터는 각 행 마다 실행하는 도중 에러가 보고되면 이후 작성된 코드를 살펴보지 않는다. 이는 보안적인 관점에서 도움이 된다.

마무리

자바에서는 인터프리터 특성 중 한 줄씩 읽는 특성에 집중하기보다는, 플랫폼에 독립적으로 작동할 수 있도록 사용됨을 중점을 두어야 할 것 같다.

profile
백엔드 개발자로 등 따숩고 배 부르게 되는 그 날까지

0개의 댓글